Panic on my NFS server: Consumer with zero access count in g_dev_strategy

Tilman Linneweh tilman at arved.de
Sat Aug 16 10:06:45 PDT 2003


Hi,

Today I did something stupid. I umount'ed a filesystem of my NFS Server,
while an NFS client was writing to it.

My NFS Server is:
polly# uname -a
FreeBSD polly.arved.de 5.1-CURRENT FreeBSD 5.1-CURRENT #1: Sat Aug 16
10:11:52 CEST 2003    
tilman at sauna.arved.de:/usr/obj/usr/source/CURRENT/sys/POLLY  i386

To my surprise I didn't got a "Device busy" error or something like
that, but the following panic. I rebooted, and tried again, and this
panic is reproducable.

panic(c03b359c,c1973b00,c403a600,c1948ab0,c1ce35b4) at panic+0xb7
g_dev_strategy(c403a600) at g_dev_strategy+0x118
spec_xstrategy(c1ce35b4,c403a600,0,cd001960,c0201253) at
spec_xstrategy+0x20f
spec_specstrategy(cd001988,cd0019a4,c026d8f4,cd001988,0) at
spec_specstrategy+0x4e
spec_vnoperate(cd001988) at spec_vnoperate+0x13
breadn(c1ce35b4,b7c4e0,0,4000,0) at breadn+0xf4
bread(c1ce35b4,b7c4e0,0,4000,0) at bread+0x20
ffs_update(c1dc0b68,1,ba,0,0) at ffs_update+0x1eb
ffs_fsync(cd001ae0,c02ade94,c0473d20,0,c0229c8d) at ffs_fsync+0x397
nfsrv_commit(c1b0d700,c1a24b00,c1948ab0,cd001c78,0) at
nfsrv_commit+0x3b6
nfssvc_nfsd(c1948ab0,c19479e0,1,c03b7606,167) at nfssvc_nfsd+0x372
nfssvc(c1948ab0,cd001d14,2,0,292) at nfssvc+0x12c
syscall(2f,2f,2f,bfbffdc4,4) at syscall+0x1ed
Xint0x80_syscall() at Xint0x80_syscall+0x1d

(kgdb) bt
#0  doadump () at /usr/source/CURRENT/sys/kern/kern_shutdown.c:240
#1  0xc014ea78 in db_fncall (dummy1=0, dummy2=0, dummy3=-1069042912,
    dummy4=0xc8967750 "lw\226Èh\234\"À ³GÀ\001")
    at /usr/source/CURRENT/sys/ddb/db_command.c:548
#2  0xc014e85e in db_command (last_cmdp=0xc03e3210, cmd_table=0x0,
    aux_cmd_tablep=0xc03db3e8, aux_cmd_tablep_end=0xc03db3ec)
    at /usr/source/CURRENT/sys/ddb/db_command.c:346
#3  0xc014e94b in db_command_loop () at
/usr/source/CURRENT/sys/ddb/db_command.c:472
#4  0xc01512ea in db_trap (type=3, code=0)
    at /usr/source/CURRENT/sys/ddb/db_trap.c:73
#5  0xc0363910 in kdb_trap (type=3, code=0, regs=0xc896787c)
    at /usr/source/CURRENT/sys/i386/i386/db_interface.c:172
#6  0xc03731cf in trap (frame=
      {tf_fs = 24, tf_es = 16, tf_ds = 16, tf_edi = 1, tf_esi =
-1069861476, tf_ebp = -929662784, tf_isp = -929662808, tf_ebx = 0,
tf_edx = 0, tf_ecx = 1, tf_eax = 18, tf_trapno = 3, tf_err = 0, tf_eip =
-1070187611, tf_cs = 8, tf_eflags = 642, tf_esp = -929662740, tf_ss =
-929662752}) at /usr/source/CURRENT/sys/i386/i386/trap.c:580
#7  0xc0364f58 in calltrap () at {standard input}:96
#8  0xc0231c97 in panic (
    fmt=0xc03b359c "Consumer with zero access count in g_dev_strategy")
    at /usr/source/CURRENT/sys/kern/kern_shutdown.c:534
#9  0xc0203ad8 in g_dev_strategy (bp=0xc4017920)
    at /usr/source/CURRENT/sys/geom/geom_dev.c:422
#10 0xc0201eaf in spec_xstrategy (vp=0xc1ce5db0, bp=0xc4017920)
    at /usr/source/CURRENT/sys/fs/specfs/spec_vnops.c:512
#11 0xc0201f0e in spec_specstrategy (ap=0xc896795c)
    at /usr/source/CURRENT/sys/fs/specfs/spec_vnops.c:529
#12 0xc0201253 in spec_vnoperate (ap=0x0)
    at /usr/source/CURRENT/sys/fs/specfs/spec_vnops.c:122
#13 0xc026d8f4 in breadn (vp=0xc1ce5db0, blkno=5269152, size=16384,
rablkno=0x0,
    rabsize=0x0, cnt=0, cred=0x0, bpp=0x0) at vnode_if.h:1116
#14 0xc026d7e0 in bread (vp=0xc1ce5db0, blkno=5269152, size=16384,
cred=0x0,
    bpp=0xc89679fc) at /usr/source/CURRENT/sys/kern/vfs_bio.c:679
#15 0xc030ddcb in ffs_update (vp=0xc1a05a44, waitfor=0)
    at /usr/source/CURRENT/sys/ufs/ffs/ffs_inode.c:104
#16 0xc0325907 in ufs_inactive (ap=0x0)
    at /usr/source/CURRENT/sys/ufs/ufs/ufs_inode.c:125
#17 0xc032c993 in ufs_vnoperate (ap=0x0)
    at /usr/source/CURRENT/sys/ufs/ufs/ufs_vnops.c:2792
#18 0xc027e32e in vput (vp=0xc1a05a44) at vnode_if.h:953
#19 0xc1a34c19 in nfsrv_write (nfsd=0xc1dab900, slp=0xc19de580,
td=0xc0b90390,
    mrq=0xc8967c78) at /usr/source/CURRENT/sys/nfsserver/nfs_serv.c:1018
#20 0xc1a40752 in nfssvc_nfsd (td=0x0)
    at /usr/source/CURRENT/sys/nfsserver/nfs_syscalls.c:445
#21 0xc1a401cc in nfssvc (td=0xc0b90390, uap=0xc8967d14)
    at /usr/source/CURRENT/sys/nfsserver/nfs_syscalls.c:180
#22 0xc037394d in syscall (frame=
      {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = -1077936700, tf_esi
= 4, tf_ebp =
---Type <return> to continue, or q <return> to quit---
-1077937592, tf_isp = -929661580, tf_ebx = 0, tf_edx = 672335864, tf_ecx
= 25, tf_eax = 155, tf_trapno = 12, tf_err = 2, tf_eip = 671851775,
tf_cs = 31, tf_eflags = 658, tf_esp = -1077937620, tf_ss = 47}) at
/usr/source/CURRENT/sys/i386/i386/trap.c:1008
#23 0xc0364fad in Xint0x80_syscall () at {standard input}:138
---Can't read userspace from dump, or kernel process---

(kgdb) fr 9
#9  0xc0203ad8 in g_dev_strategy (bp=0xc4017920)
    at /usr/source/CURRENT/sys/geom/geom_dev.c:422
422                 ("g_dev_strategy raced with g_dev_close and lost"));
(kgdb) list
417                 "g_dev_strategy(%p/%p) offset %jd length %jd data %p
cmd %d",
418                 bp, bp2, (intmax_t)bp->bio_offset,
(intmax_t)bp2->bio_length,
419                 bp2->bio_data, bp2->bio_cmd);
420             g_io_request(bp2, cp);
421             KASSERT(cp->acr || cp->acw,
422                 ("g_dev_strategy raced with g_dev_close and lost"));
423
424     }
425
426     /*
(kgdb) fr 10
#10 0xc0201eaf in spec_xstrategy (vp=0xc1ce5db0, bp=0xc4017920)
    at /usr/source/CURRENT/sys/fs/specfs/spec_vnops.c:512
512                     DEV_STRATEGY(bp);
(kgdb) list
507             if (dsw->d_flags & D_NOGIANT) {
508                     /* XXX: notyet DROP_GIANT(); */
509                     DEV_STRATEGY(bp);
510                     /* XXX: notyet PICKUP_GIANT(); */
511             } else
512                     DEV_STRATEGY(bp);
513
514             return (0);
515     }
516
(kgdb) fr 11
#11 0xc0201f0e in spec_specstrategy (ap=0xc896795c)
    at /usr/source/CURRENT/sys/fs/specfs/spec_vnops.c:529
529             return spec_xstrategy(ap->a_vp, ap->a_bp);
(kgdb) list
524
525             KASSERT(ap->a_vp->v_rdev == ap->a_bp->b_dev,
526                 ("%s, dev %s != %s", __func__,
527                 devtoname(ap->a_vp->v_rdev),
528                 devtoname(ap->a_bp->b_dev)));
529             return spec_xstrategy(ap->a_vp, ap->a_bp);
530     }
531
532     static int
533     spec_freeblks(ap)
(kgdb) fr 12
#12 0xc0201253 in spec_vnoperate (ap=0x0)
    at /usr/source/CURRENT/sys/fs/specfs/spec_vnops.c:122
122             return (VOCALL(spec_vnodeop_p, ap->a_desc->vdesc_offset,
ap));
(kgdb) list
117             struct vop_generic_args /* {
118                     struct vnodeop_desc *a_desc;
119                     <other random data follows, presumably>
120             } */ *ap;
121     {
122             return (VOCALL(spec_vnodeop_p, ap->a_desc->vdesc_offset,
ap));
123     }
124
125     /*
126      * Open a special file.




More information about the freebsd-current mailing list