diff mbox

[v2,1/2] NFS: Remove bad delegations during open recovery

Message ID 1348687553-8461-1-git-send-email-bjschuma@netapp.com (mailing list archive)
State New, archived
Headers show

Commit Message

Bryan Schumaker Sept. 26, 2012, 7:25 p.m. UTC
From: Bryan Schumaker <bjschuma@netapp.com>

I put the client into an open recovery loop by:
	Client: Open file
		read half
	Server: Expire client (echo 0 > /sys/kernel/debug/nfsd/forget_clients)
	Client: Drop vm cache (echo 3 > /proc/sys/vm/drop_caches)
		finish reading file

This causes a loop because the client never updates the nfs4_state after
discovering that the delegation is invalid.  This means it will keep
trying to read using the bad delegation rather than attempting to re-open
the file.

Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
CC: stable@vger.kernel.org [3.4+]
---
 fs/nfs/nfs4proc.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

William Dauchy Sept. 26, 2012, 10:19 p.m. UTC | #1
On Wed, Sep 26, 2012 at 9:25 PM,  <bjschuma@netapp.com> wrote:
> This causes a loop because the client never updates the nfs4_state after
> discovering that the delegation is invalid.  This means it will keep
> trying to read using the bad delegation rather than attempting to re-open
> the file.

Oh, I already encountered this bug but never found the time to debug
it / report it.

Thanks a lot! I'll try to test it soon.
Bryan Schumaker Sept. 27, 2012, 12:35 p.m. UTC | #2
On 09/26/2012 06:19 PM, William Dauchy wrote:
> On Wed, Sep 26, 2012 at 9:25 PM,  <bjschuma@netapp.com> wrote:
>> This causes a loop because the client never updates the nfs4_state after
>> discovering that the delegation is invalid.  This means it will keep
>> trying to read using the bad delegation rather than attempting to re-open
>> the file.
> 
> Oh, I already encountered this bug but never found the time to debug
> it / report it.
> 
> Thanks a lot! I'll try to test it soon.
> 

Awesome!  Let me know how your tests go, thanks.

- Bryan
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
William Dauchy Sept. 28, 2012, 5:02 p.m. UTC | #3
On Thu, Sep 27, 2012 at 2:35 PM, Bryan Schumaker <bjschuma@netapp.com> wrote:
> Awesome!  Let me know how your tests go, thanks.

Oh I didn't saw it was nfs4.1 specific since the header shows "NFS:
Remove bad delegations during open recovery"
Sorry, I thought about a general nfs bug.

Regards,
diff mbox

Patch

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 1e50326..1d49168 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1774,7 +1774,11 @@  static void nfs41_clear_delegation_stateid(struct nfs4_state *state)
 		 * informs us the stateid is unrecognized. */
 		if (status != -NFS4ERR_BAD_STATEID)
 			nfs41_free_stateid(server, stateid);
+		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);
 	}
 }