nfsd4: Move callback setup to callback queue
authorJ. Bruce Fields <bfields@citi.umich.edu>
Sat, 5 Jun 2010 00:04:45 +0000 (20:04 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 1 Oct 2010 23:29:44 +0000 (19:29 -0400)
commit6ff8da088766d70f0441feb982b82978a6cbf7ef
tree7d0e90e4e03323fec67a972cdff60c9b8a96925a
parentfb003923263c3f0cb02adbd56a22fe16ef5c0e77
nfsd4: Move callback setup to callback queue

Instead of creating the new rpc client from a regular server thread,
set a flag, kick off a null call, and allow the null call to do the work
of setting up the client on the callback workqueue.

Use a spinlock to ensure the callback work gets a consistent view of the
callback parameters.

This allows, for example, changing the callback from contexts where
sleeping is not allowed.  I hope it will also keep the locking simple as
we add more session and trunking features, by serializing most of the
callback-specific work.

This also closes a small race where the the new cb_ident could be used
with an old connection (or vice-versa).

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
fs/nfsd/nfs4callback.c
fs/nfsd/nfs4state.c
fs/nfsd/state.h