nfsd4: fix state lock usage in LOCKU
In commit
5ec094c1096ab3bb795651855d53f18daa26afde "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>