nfsd4: use recall_lock for delegation hashing
authorBenny Halevy <bhalevy@primarydata.com>
Fri, 30 May 2014 13:09:27 +0000 (09:09 -0400)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 11 Jul 2014 12:33:46 +0000 (13:33 +0100)
commitba1ef838a9e275933683edbd08b6e2226f16e351
tree4d714983dbd5a90b10dcbdc4a9d52593cc6428d4
parent13ce2ab0f6dc3ce7ee779b204786b7e501ac5c1b
nfsd4: use recall_lock for delegation hashing

commit 931ee56c67573eb4e51c8a4e78598d965b8b059e upstream.

This fixes a bug in the handling of the fi_delegations list.

nfs4_setlease does not hold the recall_lock when adding to it. The
client_mutex is held, which prevents against concurrent list changes,
but nfsd_break_deleg_cb does not hold while walking it. New delegations
could theoretically creep onto the list while we're walking it there.

Signed-off-by: Benny Halevy <bhalevy@primarydata.com>
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
[bwh: Backported to 3.2:
 - Adjust context
 - Also remove a list_del_init() in nfs4_setlease() which would now be
   before the corresponding list_add()
 - Drop change to nfsd_find_all_delegations(), which doesn't exist]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
fs/nfsd/nfs4state.c