nfsd: protect clid and verifier generation with client_lock
authorJeff Layton <jlayton@primarydata.com>
Wed, 30 Jul 2014 12:27:15 +0000 (08:27 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 5 Aug 2014 14:55:02 +0000 (10:55 -0400)
commit294ac32e99861f6efee548a6b7afb27c32cd502f
tree0050131c1e101462a193e9cc22115fc2ea37e94d
parentfd699b8a48c0ca36e782cf705794358b3e4b8c25
nfsd: protect clid and verifier generation with client_lock

The clid counter is a global counter currently. Move it to be a per-net
property so that it can be properly protected by the nn->client_lock
instead of relying on the client_mutex.

The verifier generator is also potentially racy if there are two
simultaneous callers. Generate the verifier when we generate the clid
value, so it's also created under the client_lock. With this, there's
no need to keep two counters as they'd always be in sync anyway, so
just use the clientid_counter for both.

As Trond points out, what would be best is to eventually move this
code to use IDR instead of the hash tables. That would also help ensure
uniqueness, but that's probably best done as a separate project.

Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/netns.h
fs/nfsd/nfs4state.c