Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Oct 2002 03:57:52 -0600
From:      Sean Kelly <smkelly@zombie.org>
To:        current@freebsd.org
Subject:   UFS Snapshot deadlock
Message-ID:  <20021030095752.GA1868@edgemaster.zombie.org>

next in thread | raw e-mail | index | archive | help
While playing with UFS snapshots on a UFS2 filesystem I mounted
specifically for this purpose, I encountered a little problem. It seems I
have processes deadlocked on each other.

Steps to repeat:
/# mount /dev/ad2a /mnt ; cd /mnt
/dev/ad2a on /mnt (ufs, local, soft-updates, multilabel) # UFS2
/mnt# cd /mnt; mount -u -o snapshot /mnt/snapshot /mnt

*switch vtys*

/# cd /mnt; ls -l
*ls deadlocks*
*I get bored and ^C the mount on the other vty about 30 minutes later*
/mnt# ls 
*this ls deadlocks too*

For the record, /mnt was a new filesystem. It had *nothing* in it. No
directories or anything.

So now, I've got these:
  UID   PID  PPID CPU PRI NI   VSZ  RSS MWCHAN STAT  TT       TIME COMMAND
    0  1133   669   0  -4  0   692  548 ufs    D+    v1    0:00.00 ls
 1001   939   856   0  -4  0   696  560 ufs    D+    v2    0:00.00 ls -l
    0   937     1   0  -4  0   560  336 ufs    D     v1    0:00.65 mount -u -o snapshot /mnt/snapshot /mnt


Now for some numbers.

db> trace 937
mi_switch(c71aab60,50,c03375c6,c7,c03ad2f8) at mi_switch+0x158
msleep(c75098dc,c03a9358,50,c034f732,0) at msleep+0x3b4
acquire(c75098dc,1000040,600,e6,3a9) at acquire+0xa7
lockmgr(c75098dc,1010002,c7509818,c71aab60,e5b076a8) at lockmgr+0x2f7
vop_stdlock(e5b076c4,e5b076e0,c021e306,e5b076c4,0) at vop_stdlock+0x2c
ufs_vnoperate(e5b076c4,0,c033dd28,e5b076e0,c01ba4a5) at ufs_vnoperate+0x18
vn_lock(c7509818,10002,c71aab60,815,c7509818) at vn_lock+0xd6
vget(c7509818,2,c71aab60,470,0) at vget+0xd6
ffs_sync(c74c5400,1,c726a780,c71aab60,c74f1000) at ffs_sync+0x126
vfs_write_suspend(c74c5400,c74ffcb8,d351f08c,1,c2c06e80) at vfs_write_suspend+0x70
ffs_snapshot(c74c5400,bfbffd1d,70,c033990d,252) at ffs_snapshot+0xa48
ffs_mount(c74c5400,c745ce80,bfbff000,e5b07bf0,c71aab60) at ffs_mount+0x548
vfs_mount(c71aab60,c6d2b780,c745ce80,1010000,bfbff000) at vfs_mount+0x85e
mount(c71aab60,e5b07d14,c03590ba,409,4) at mount+0xb8
syscall(2f,2f,2f,bfbfeffc,bfbff9f4) at syscall+0x22e
Xint0x80_syscall() at Xint0x80_syscall+0x1d

db> trace 939
mi_switch(c74260d0,50,c03375c6,c7,1cc) at mi_switch+0x158
msleep(c74ffd7c,c03a9688,50,c034f732,0) at msleep+0x3b4
acquire(c74ffd7c,1000040,600,e6,3ab) at acquire+0xa7
lockmgr(c74ffd7c,1010002,c74ffcb8,c74260d0,e5bfd83c) at lockmgr+0x2f7
vop_stdlock(e5bfd858,e5bfd874,c021e306,e5bfd858,246) at vop_stdlock+0x2c
ufs_vnoperate(e5bfd858,246,0,c74f1000,0) at ufs_vnoperate+0x18
vn_lock(c74ffcb8,10002,c74260d0,7f,3) at vn_lock+0xd6
vget(c74ffcb8,10002,c74260d0,7f,c74260d0) at vget+0xd6
ufs_ihashget(c74cce00,3,2,e5bfd98c,e5bfd8f0) at ufs_ihashget+0xd2
ffs_vget(c74c5400,3,2,e5bfd98c,e5bfd994) at ffs_vget+0x44
ufs_lookup(e5bfdac0,e5bfdafc,c0207a24,e5bfdac0,e5bfdc3c) at ufs_lookup+0xdae
ufs_vnoperate(e5bfdac0,e5bfdc3c,e5bfdc50,3ab,c74260d0) at ufs_vnoperate+0x18
vfs_cache_lookup(e5bfdb70,e5bfdb9c,c020bd39,e5bfdb70,c7509818) at vfs_cache_lookup+0x2e4
ufs_vnoperate(e5bfdb70,c7509818,e5bfdc50,e5bfdb5c,c74260d0) at ufs_vnoperate+0x18
lookup(e5bfdc28,0,c033d6ad,a4,c74260d0) at lookup+0x309
namei(e5bfdc28,c03ade38,c03ade10,c03b42a0,0) at namei+0x1e0
lstat(c74260d0,e5bfdd14,c03590ba,409,2) at lstat+0x52
syscall(2f,2f,2f,80d3200,80d1040) at syscall+0x22e
Xint0x80_syscall() at Xint0x80_syscall+0x1d
--- syscall (190, FreeBSD ELF32, lstat), eip = 0x805838b, esp = 0xbfbff3dc, ebp = 0xbfbff468 ---

db> trace 1133
mi_switch(c6d31680,50,c03375c6,c7,2) at mi_switch+0x158
msleep(c75098dc,c03a9358,50,c034f732,0) at msleep+0x3b4
acquire(c75098dc,1000040,600,e6,46d) at acquire+0xa7
lockmgr(c75098dc,1030002,c7509818,c6d31680,e3887ad0) at lockmgr+0x2f7
vop_stdlock(e3887aec,e3887b08,c021e306,e3887aec,0) at vop_stdlock+0x2c
ufs_vnoperate(e3887aec,0,c033e1ac,360,c01e3af0) at ufs_vnoperate+0x18
vn_lock(c7509818,20002,c6d31680,e3887b5c,c6d31680) at vn_lock+0xd6
lookup(e3887c28,0,c033d6ad,a4,c6d31680) at lookup+0x8e
namei(e3887c28,c03ade38,c03ade10,c03b42a0,0) at namei+0x1e0
stat(c6d31680,e3887d14,c03590ba,409,2) at stat+0x52
syscall(2f,2f,2f,80d3080,80d1000) at syscall+0x22e
Xint0x80_syscall() at Xint0x80_syscall+0x1d
--- syscall (188, FreeBSD ELF32, stat), eip = 0x80583b3, esp = 0xbfbff4dc, ebp = 0xbfbff568 ---

db> x/x 0xc74ffd7c, 20
0xc74ffd7c:     c03a9688        1200440         0               1
0xc74ffd8c:     500001          c034f732        6               3a9
0xc74ffd9c:     c74ffd7c        c6be9500        c74c5400        0
0xc74ffdac:     0               c74ffdac        968             c74ffcb8
0xc74ffdbc:     0               0               1               0
0xc74ffdcc:     0               0               0               0
0xc74ffddc:     ffffffff        c0370e80        c033dd98        c033dd98
0xc74ffdec:     30000           c74cb734        c7508010        c03acfd8

db> x/x 0xc75098dc, 10
0xc75098dc:     c03a9358        1200440         0               3
0xc75098ec:     500001          c034f732        6               3ab
0xc75098fc:     c75098dc        c6be9500        c74c5400        0
0xc750990c:     0               c750990c        93c             c7509818

(gdb) list *( ufs_lookup+0xdae)
0xc02bd86e is in ufs_lookup (/usr/src/sys/ufs/ufs/ufs_lookup.c:602).
597             } else if (dp->i_number == dp->i_ino) {
598                     VREF(vdp);      /* we want ourself, ie "." */
599                     *vpp = vdp;
600             } else {
601                     error = VFS_VGET(pdp->v_mount, dp->i_ino, LK_EXCLUSIVE, &tdp);
602                     if (error)
603                             return (error);
604                     if (!lockparent || !(flags & ISLASTCN)) {
605                             VOP_UNLOCK(pdp, 0, td);
606                             cnp->cn_flags |= PDIRUNLOCK;

-- 
Sean Kelly         | PGP KeyID: 77042C7B
smkelly@zombie.org | http://www.zombie.org

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021030095752.GA1868>