Patch "pNFS: Separate handling of NFS4ERR_LAYOUTTRYLATER and RECALLCONFLICT" has been added to the 4.7-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
pNFS: Separate handling of NFS4ERR_LAYOUTTRYLATER and RECALLCONFLICT
to the 4.7-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:
pnfs-separate-handling-of-nfs4err_layouttrylater-and-recallconflict.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
e85d7ee42003314652ab3ae2c60e3b8cd793b65fMon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Thu, 14 Jul 2016 18:46:24 -0400
Subject: pNFS: Separate handling of NFS4ERR_LAYOUTTRYLATER and RECALLCONFLICT
From: Trond Myklebust <[email protected]>
commit e85d7ee42003314652ab3ae2c60e3b8cd793b65f upstream.
They are not the same error, and need to be handled differently.
--- fs/nfs/nfs4proc.c | 23 ++++++++++++++--------- fs/nfs/pnfs.c | 1 + 2 files changed, 15 insertions(+), 9 deletions(-)
fs/nfs/nfs4proc.c +14 -9
@@ -427,6 +427,7 @@ static int nfs4_do_handle_exception(strucase -NFS4ERR_DELAY :nfs_inc_server_stats (server,NFSIOS_DELAY );case -NFS4ERR_GRACE : +case -NFS4ERR_LAYOUTTRYLATER :case -NFS4ERR_RECALLCONFLICT : exception->delay =1 ;return 0 ;
@@ -7869,11 +7870,12 @@ nfs4_layoutget_handle_exception(struct rstruct inode *inode = lgp->args.inode;struct nfs_server *server =NFS_SERVER (inode);struct pnfs_layout_hdr *lo; -int status = task->tk_status; +int nfs4err = task->tk_status; +int err, status =0 ;dprintk ("--> %s tk_status => %d\n" , __func__, -task->tk_status); -switch (status) { +switch (nfs4err) {case 0 : goto out;
@@ -7905,12 +7907,11 @@ nfs4_layoutget_handle_exception(struct r status = -EOVERFLOW ; goto out; } -/* Fallthrough */ + status = -EBUSY ; +break ;case -NFS4ERR_RECALLCONFLICT : -nfs4_handle_exception (server, -NFS4ERR_RECALLCONFLICT , - exception); status = -ERECALLCONFLICT ; - goto out; +break ;case -NFS4ERR_EXPIRED :case -NFS4ERR_BAD_STATEID : exception->timeout =0 ;
@@ -7941,9 +7942,13 @@ nfs4_layoutget_handle_exception(struct rspin_unlock (&inode->i_lock); } - status =nfs4_handle_exception (server, status, exception); -if (exception->retry) - status = -EAGAIN ; + err =nfs4_handle_exception (server, nfs4err, exception); +if (!status) { +if (exception->retry) + status = -EAGAIN ; +else + status = err; + } out:dprintk ("<-- %s\n" , __func__);return status;
fs/nfs/pnfs.c +1 -0
@@ -1647,6 +1647,7 @@ lookup_again: PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET);if (IS_ERR (lseg)) {switch (PTR_ERR (lseg)) { +case -EBUSY :case -ERECALLCONFLICT :if (time_after (jiffies, giveup)) lseg =NULL ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/nfs-don-t-create-zero-length-requests.patch queue-4.7/pnfs-separate-handling-of-nfs4err_layouttrylater-and-recallconflict.patch queue-4.7/pnfs-handle-nfs4err_recallconflict-correctly-in-layoutget.patch queue-4.7/pnfs-fix-layoutget-handling-of-nfs4err_bad_stateid-and-nfs4err_expired.patch queue-4.7/pnfs-fix-post-layoutget-error-handling-in-pnfs_update_layout.patch