On Mon, 2013-08-12 at 16:52 +1000, NeilBrown wrote: > > After reclaiming state that was lost, the NFS client tries to reclaim > any locks, and then checks that each one has NFS_LOCK_INITIALIZED set > (which means that the server has confirmed the lock). > However if the client holds a delegation, nfs_reclaim_locks() simply aborts > (or more accurately it called nfs_lock_reclaim() and that returns without > doing anything). > > This is because when a delegation is held, the server doesn't need to > know about locks. > > So if a delegation is held, NFS_LOCK_INITIALIZED is not expected, and > its absence is certainly not an error. > > So don't print the warnings if NFS_DELGATED_STATE is set. > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > > diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c > index e22862f..e4e063f 100644 > --- a/fs/nfs/nfs4state.c > +++ b/fs/nfs/nfs4state.c > @@ -1443,14 +1443,16 @@ restart: > if (status >= 0) { > status = nfs4_reclaim_locks(state, ops); > if (status >= 0) { > - spin_lock(&state->state_lock); > - list_for_each_entry(lock, &state->lock_states, ls_locks) { > - if (!test_bit(NFS_LOCK_INITIALIZED, &lock->ls_flags)) > - pr_warn_ratelimited("NFS: " > - "%s: Lock reclaim " > - "failed!\n", __func__); > + if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0) { > + spin_lock(&state->state_lock); > + list_for_each_entry(lock, &state->lock_states, ls_locks) { > + if (!test_bit(NFS_LOCK_INITIALIZED, &lock->ls_flags)) > + pr_warn_ratelimited("NFS: " > + "%s: Lock reclaim " > + "failed!\n", __func__); > + } > + spin_unlock(&state->state_lock); > } > - spin_unlock(&state->state_lock); > nfs4_put_open_state(state); > spin_lock(&sp->so_lock); > goto restart; That looks correct to me. Applied. Thanks Neil! Trond -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥