This is a note to let you know that I've just added the patch titled
NFSv4: Ensure that we remove NFSv4.0 delegations when state has expired
to the 3.17-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nfsv4-ensure-that-we-remove-nfsv4.0-delegations-when-state-has-expired.patch
and it can be found in the queue-3.17 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.
>From 4dfd4f7af0afd201706ad186352ca423b0f17d4b Mon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Fri, 17 Oct 2014 15:10:25 +0300
Subject: NFSv4: Ensure that we remove NFSv4.0 delegations when state has expired
From: Trond Myklebust <[email protected]>
commit 4dfd4f7af0afd201706ad186352ca423b0f17d4b upstream.
NFSv4.0 does not have TEST_STATEID/FREE_STATEID functionality, so
unlike NFSv4.1, the recovery procedure when stateids have expired or
have been revoked requires us to just forget the delegation.
http://lkml.kernel.org/r/CAN-5tyHwG=cn2q9kshwadewjptty_k26ee+unsvhvg4192p...@mail.gmail.com
Signed-off-by: Trond Myklebust <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
fs/nfs/nfs4proc.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2102,6 +2102,28 @@ static int nfs4_open_expired(struct nfs4
return ret;
}
+static void nfs_finish_clear_delegation_stateid(struct nfs4_state *state)
+{
+ nfs_remove_bad_delegation(state->inode);
+ write_seqlock(&state->seqlock);
+ nfs4_stateid_copy(&state->stateid, &state->open_stateid);
+ write_sequnlock(&state->seqlock);
+ clear_bit(NFS_DELEGATED_STATE, &state->flags);
+}
+
+static void nfs40_clear_delegation_stateid(struct nfs4_state *state)
+{
+ if (rcu_access_pointer(NFS_I(state->inode)->delegation) != NULL)
+ nfs_finish_clear_delegation_stateid(state);
+}
+
+static int nfs40_open_expired(struct nfs4_state_owner *sp, struct nfs4_state
*state)
+{
+ /* NFSv4.0 doesn't allow for delegation recovery on open expire */
+ nfs40_clear_delegation_stateid(state);
+ return nfs4_open_expired(sp, state);
+}
+
#if defined(CONFIG_NFS_V4_1)
static void nfs41_clear_delegation_stateid(struct nfs4_state *state)
{
@@ -8366,7 +8388,7 @@ static const struct nfs4_state_recovery_
static const struct nfs4_state_recovery_ops nfs40_nograce_recovery_ops = {
.owner_flag_bit = NFS_OWNER_RECLAIM_NOGRACE,
.state_flag_bit = NFS_STATE_RECLAIM_NOGRACE,
- .recover_open = nfs4_open_expired,
+ .recover_open = nfs40_open_expired,
.recover_lock = nfs4_lock_expired,
.establish_clid = nfs4_init_clientid,
};
Patches currently in stable-queue which might be from
[email protected] are
queue-3.17/sunrpc-fix-sleeping-under-rcu_read_lock-in-gss_stringify_acceptor.patch
queue-3.17/nfsv4-ensure-that-we-remove-nfsv4.0-delegations-when-state-has-expired.patch
queue-3.17/nfsv4.1-nfs41_clear_delegation_stateid-shouldn-t-trust-nfs_delegated_state.patch
queue-3.17/nfsv4-fix-races-between-nfs_remove_bad_delegation-and-delegation-return.patch
queue-3.17/nfs-fix-use-of-uninitialized-variable-in-nfs_getattr.patch
queue-3.17/nfs-fix-pnfs-direct-write-memory-leak.patch
queue-3.17/nfs-don-t-try-to-reclaim-delegation-open-state-if-recovery-failed.patch
queue-3.17/nfsv4-ensure-that-we-call-free_stateid-when-nfsv4.x-stateids-are-revoked.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html