Message ID | 1487842966-30986-9-git-send-email-xzhou@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Feb 23, 2017 at 11:42 AM, Xiong Zhou <xzhou@redhat.com> wrote: > Lower dir comes from another overlayfs dir, then > accessing files in it should work. > > CC: Miklos Szeredi <mszeredi@redhat.com> > Signed-off-by: Xiong Zhou <xzhou@redhat.com> > --- FYI, this test triggers a false positive lockdep splat. I did not notice it earlier, because I carry a fix patch that Miklos did not pick up yet. The fix patch is here: http://www.spinics.net/lists/linux-unionfs/msg01428.html overlay/029 [08:14:06] ============================================= [ INFO: possible recursive locking detected ] 4.9.0-debug-12264-g60ae0f1 #426 Not tainted --------------------------------------------- cat/3367 is trying to acquire lock: (&sb->s_type->i_mutex_key#15){.+.+.+}, at: [<ffffffff81217858>] lookup_slow+0x81/0x185 but task is already holding lock: (&sb->s_type->i_mutex_key#15){.+.+.+}, at: [<ffffffff8121b955>] do_last+0x179/0x608 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&sb->s_type->i_mutex_key#15); lock(&sb->s_type->i_mutex_key#15); *** DEADLOCK *** May be due to missing lock nesting notation 1 lock held by cat/3367: #0: (&sb->s_type->i_mutex_key#15){.+.+.+}, at: [<ffffffff8121b955>] do_last+0x179/0x608 stack backtrace: CPU: 0 PID: 3367 Comm: cat Not tainted 4.9.0-debug-12264-g60ae0f1 #426 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014 Call Trace: dump_stack+0x85/0xbe __lock_acquire+0x1082/0x153f ? mark_held_locks+0x5e/0x74 lock_acquire+0x13b/0x1d6 ? lock_acquire+0x13b/0x1d6 ? lookup_slow+0x81/0x185 down_read+0x43/0x9a ? lookup_slow+0x81/0x185 lookup_slow+0x81/0x185 lookup_one_len_unlocked+0xca/0xdc ovl_lookup_single+0x30/0x2c6 ? ovl_lookup+0x158/0x414 ovl_lookup_layer+0x46/0x137 ovl_lookup+0x1b5/0x414 ? __d_lookup+0x22a/0x23c lookup_open+0x44c/0x622 ? lookup_open+0x44c/0x622 ? rwsem_down_read_failed+0x25/0x164 do_last+0x196/0x608 ? path_init+0x2d9/0x681 path_openat+0x285/0x30c ? __might_fault+0x37/0x84 do_filp_open+0x4d/0xa3 ? sched_clock+0x9/0xd ? __alloc_fd+0x1af/0x1c1 ? _raw_spin_unlock+0x27/0x31 do_sys_open+0x13c/0x1cb ? do_sys_open+0x13c/0x1cb SyS_open+0x1e/0x20 entry_SYSCALL_64_fastpath+0x1f/0xc2 RIP: 0033:0x7f253e9d7960 RSP: 002b:00007fff5caeba48 EFLAGS: 00000246 ORIG_RAX: 0000000000000002 RAX: ffffffffffffffda RBX: 00007fff5caebca8 RCX: 00007f253e9d7960 RDX: 0000000000020000 RSI: 0000000000000000 RDI: 00007fff5caee235 RBP: 0000000000001000 R08: 0000000000000000 R09: 0000000000000000 R10: 00007fff5caeb810 R11: 0000000000000246 R12: 00000000004025a6 R13: 00007fff5caebca0 R14: 0000000000000000 R15: 0000000000000000 [08:14:07] 1s -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tests/overlay/029 b/tests/overlay/029 new file mode 100755 index 0000000..902a84c --- /dev/null +++ b/tests/overlay/029 @@ -0,0 +1,100 @@ +#! /bin/bash +# FS QA Test 029 +# +# There are dirs/files in lower dir and upper dir before +# mounting overlayfs. After mounting, use dir in overlayfs +# mountpoint as lowerdir to mount another overlayfs, then +# access old files through the second overlayfs. It was +# not working, kernel commit below fixed it. +# +# c4fcfc1619ea ovl: fix d_real() for stacked fs +# +# This reproducer was originally written by +# Miklos Szeredi <mszeredi@redhat.com> +# +#----------------------------------------------------------------------- +# Copyright (c) 2017 Red Hat Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + $UMOUNT_PROG $tmp/mnt + rm -rf $tmp + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here + +# Modify as appropriate. +_supported_fs overlay +_supported_os Linux +_require_scratch + +# Remove all files from previous tests +_scratch_mkfs + +# Preparing files +upperdir=$SCRATCH_DEV/$OVERLAY_UPPER_DIR +lowerdir=$SCRATCH_DEV/$OVERLAY_LOWER_DIR +mkdir -p $upperdir/up +echo foo > $upperdir/up/foo +mkdir -p $lowerdir/low +echo bar > $lowerdir/low/bar + +# mount overlay in SCRATCH_MNT +_scratch_mount + +mkdir -p $tmp/{upper,mnt,work} +# mount overlay again using upper dir from SCRATCH_MNT dir +_overlay_mount_dirs $SCRATCH_MNT/up $tmp/{upper,work} \ + overlay $tmp/mnt +# accessing file in the second mount +cat $tmp/mnt/foo +$UMOUNT_PROG $tmp/mnt + +# mount overlay again using lower dir from SCRATCH_MNT dir +_overlay_mount_dirs $SCRATCH_MNT/low $tmp/{upper,work} \ + overlay $tmp/mnt +cat $tmp/mnt/bar +$UMOUNT_PROG $tmp/mnt + +# mount overlay again using SCRATCH_MNT dir +_overlay_mount_dirs $SCRATCH_MNT/ $tmp/{upper,work} \ + overlay $tmp/mnt +cat $tmp/mnt/up/foo +cat $tmp/mnt/low/bar + +# success, all done +status=0 +exit diff --git a/tests/overlay/029.out b/tests/overlay/029.out new file mode 100644 index 0000000..e7f192c --- /dev/null +++ b/tests/overlay/029.out @@ -0,0 +1,5 @@ +QA output created by 029 +foo +bar +foo +bar diff --git a/tests/overlay/group b/tests/overlay/group index cf058fc..7e72a30 100644 --- a/tests/overlay/group +++ b/tests/overlay/group @@ -31,3 +31,4 @@ 026 auto attr quick 027 auto quick perms 028 auto copyup quick +029 auto quick
Lower dir comes from another overlayfs dir, then accessing files in it should work. CC: Miklos Szeredi <mszeredi@redhat.com> Signed-off-by: Xiong Zhou <xzhou@redhat.com> --- tests/overlay/029 | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/overlay/029.out | 5 +++ tests/overlay/group | 1 + 3 files changed, 106 insertions(+) create mode 100755 tests/overlay/029 create mode 100644 tests/overlay/029.out