linux/fs/nfsd
J. Bruce Fields 71c3bcd713 nfsd4: fix state lock usage in LOCKU
In commit 5ec094c109 "nfsd4: extend state
lock over seqid replay logic" I modified the exit logic of all the
seqid-based procedures except nfsd4_locku().  Fix the oversight.

The result of the bug was a double-unlock while handling the LOCKU
procedure, and a warning like:

[  142.150014] WARNING: at kernel/mutex-debug.c:78 debug_mutex_unlock+0xda/0xe0()
...
[  142.152927] Pid: 742, comm: nfsd Not tainted 3.1.0-rc1-SLIM+ #9
[  142.152927] Call Trace:
[  142.152927]  [<ffffffff8105fa4f>] warn_slowpath_common+0x7f/0xc0
[  142.152927]  [<ffffffff8105faaa>] warn_slowpath_null+0x1a/0x20
[  142.152927]  [<ffffffff810960ca>] debug_mutex_unlock+0xda/0xe0
[  142.152927]  [<ffffffff813e4200>] __mutex_unlock_slowpath+0x80/0x140
[  142.152927]  [<ffffffff813e42ce>] mutex_unlock+0xe/0x10
[  142.152927]  [<ffffffffa03bd3f5>] nfs4_lock_state+0x35/0x40 [nfsd]
[  142.152927]  [<ffffffffa03b0b71>] nfsd4_proc_compound+0x2a1/0x690
[nfsd]
[  142.152927]  [<ffffffffa039f9fb>] nfsd_dispatch+0xeb/0x230 [nfsd]
[  142.152927]  [<ffffffffa02b1055>] svc_process_common+0x345/0x690
[sunrpc]
[  142.152927]  [<ffffffff81058d10>] ? try_to_wake_up+0x280/0x280
[  142.152927]  [<ffffffffa02b16e2>] svc_process+0x102/0x150 [sunrpc]
[  142.152927]  [<ffffffffa039f0bd>] nfsd+0xbd/0x160 [nfsd]
[  142.152927]  [<ffffffffa039f000>] ? 0xffffffffa039efff
[  142.152927]  [<ffffffff8108230c>] kthread+0x8c/0xa0
[  142.152927]  [<ffffffff813e8694>] kernel_thread_helper+0x4/0x10
[  142.152927]  [<ffffffff81082280>] ? kthread_worker_fn+0x190/0x190
[  142.152927]  [<ffffffff813e8690>] ? gs_change+0x13/0x13

Reported-by: Bryan Schumaker <bjschuma@netapp.com>
Tested-by: Bryan Schumaker <bjschuma@netapp.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2011-10-10 18:04:45 -04:00
..
Kconfig nfsd: Remove deprecated nfsctl system call and related code. 2011-07-15 18:58:42 -04:00
Makefile
acl.h
auth.c
auth.h
cache.h nfsd: turn on reply cache for NFSv4 2011-07-18 09:39:01 -04:00
export.c NFSD: Remove the ex_pathname field from struct svc_export 2011-09-13 22:44:10 -04:00
idmap.h
lockd.c nfsd: Remove deprecated nfsctl system call and related code. 2011-07-15 18:58:42 -04:00
nfs2acl.c
nfs3acl.c
nfs3proc.c nfsd41: make sure nfs server process OPEN with EXCLUSIVE4_1 correctly 2011-04-29 20:47:52 -04:00
nfs3xdr.c Merge branch 'for-2.6.40' of git://linux-nfs.org/~bfields/linux 2011-05-29 11:21:12 -07:00
nfs4acl.c
nfs4callback.c nfsd4: move client * to nfs4_stateid, add init_stid helper 2011-09-26 17:35:25 -04:00
nfs4idmap.c
nfs4proc.c nfsd4: make op_cacheresult another flag 2011-09-20 14:45:51 -04:00
nfs4recover.c nfsd4: stop using nfserr_resource for transitory errors 2011-08-27 14:21:21 -04:00
nfs4state.c nfsd4: fix state lock usage in LOCKU 2011-10-10 18:04:45 -04:00
nfs4xdr.c nfsd4: look up stateid's per clientid 2011-09-26 17:35:28 -04:00
nfscache.c nfsd: turn on reply cache for NFSv4 2011-07-18 09:39:01 -04:00
nfsctl.c nfsd: remove include/linux/nfsd/syscall.h 2011-08-31 11:50:11 -04:00
nfsd.h NFSD: Add a cache for fs_locations information 2011-09-13 22:44:17 -04:00
nfsfh.c nfsd: clean up nfsd_mode_check() 2011-08-26 18:22:48 -04:00
nfsfh.h
nfsproc.c
nfssvc.c nfsd: turn on reply cache for NFSv4 2011-07-18 09:39:01 -04:00
nfsxdr.c
state.h nfsd4: look up stateid's per clientid 2011-09-26 17:35:28 -04:00
stats.c treewide: fix a few typos in comments 2011-05-10 10:16:21 +02:00
vfs.c NFSD: Add a cache for fs_locations information 2011-09-13 22:44:17 -04:00
vfs.h nfsd: prettify NFSD_MAY_* flag definitions 2011-08-27 14:20:21 -04:00
xdr.h
xdr3.h
xdr4.h nfsd4: assume test_stateid always has session 2011-09-26 17:35:27 -04:00