panic: mutex Giant owned at nfs_syscalls.c:556
pluknet
pluknet at gmail.com
Mon Mar 3 18:27:18 UTC 2008
On 03/03/2008, Kostik Belousov <kostikbel at gmail.com> wrote:
[snip]
> To summarize, I need both the tcpdump and kernel/witness messages from
> the panic.
>
I'm sorry. Here it is.
http://pluknet.nm.ru/dev/tcpdump-nfsserver-full.raw
The messages (same as unread msgbuf in initial posting, hand-scribed):
panic: mutex Giant owned at
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_syscalls.c:556
KDB: enter: panic
[thread pid 601 tid 100055 ]
Stopped at kdb_enter+0x3a: movl $0,kdb_why
db> show locks
exclusive sleep mutex nfsd_mtx r = 0 (0xc2e0af40) locked @
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_syscalls.c:501
exclusive sleep mutex Giant r = 0 (0xc07e6410) locked @
/usr/src/sys/kern/vfs_lookup.c:663
> Nevertheless, the patch below might help with the panic during
> the unlinking (not tested).
>
> diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c
> index 446651d..87e1aaa 100644
> --- a/sys/nfsserver/nfs_serv.c
> +++ b/sys/nfsserver/nfs_serv.c
> @@ -2146,7 +2146,7 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
> nfsfh_t nfh;
> fhandle_t *fhp;
> struct mount *mp = NULL;
> - int vfslocked;
> + int vfslocked, vfslocked1;
>
> nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
> ndclear(&nd);
> @@ -2168,7 +2168,11 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
> nd.ni_cnd.cn_flags = LOCKPARENT | LOCKLEAF | MPSAFE;
> error = nfs_namei(&nd, fhp, len, slp, nam, &md, &dpos,
> &dirp, v3, &dirfor, &dirfor_ret, td, FALSE);
> - vfslocked = NDHASGIANT(&nd);
> + vfslocked1 = NDHASGIANT(&nd);
> + if (vfslocked && vfslocked1)
> + VFS_UNLOCK_GIANT(vfslocked1);
> + if (vfslocked || vfslocked1)
> + vfslocked = 1;
> if (dirp && !v3) {
> vrele(dirp);
> dirp = NULL;
>
>
Now the last lock triplex looks like:
vfslocked lock in
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_serv.c, 2161
vfslocked lock in
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_srvsubs.c, 1106
vfslocked lock in
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_srvsubs.c, 673
vfslocked unlock in
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_srvsubs.c, 916
vfslocked1 unlock in
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_serv.c, 2173
^^^
vfslocked unlock in
/usr/src/sys/modules/nfsserver/../../nfsserver/nfs_serv.c, 2238
And no panic. Thanks.
wbr,
pluknet
More information about the freebsd-current
mailing list