From: Jeff Layton <jlayton@redhat.com>
To: Trond Myklebust <trond.myklebust@primarydata.com>,
linux-nfs@vger.kernel.org
Subject: Re: [PATCH 2/4] pNFS: Separate handling of NFS4ERR_LAYOUTTRYLATER and RECALLCONFLICT
Date: Fri, 15 Jul 2016 10:38:23 -0400 [thread overview]
Message-ID: <1468593503.3584.3.camel@redhat.com> (raw)
In-Reply-To: <1468537115-65826-2-git-send-email-trond.myklebust@primarydata.com>
On Thu, 2016-07-14 at 18:58 -0400, Trond Myklebust wrote:
> They are not the same error, and need to be handled differently.
>
> Fixes: 183d9e7b112aa ("pnfs: rework LAYOUTGET retry handling")
> Cc: stable@vger.kernel.org # 4.7
> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
> ---
> fs/nfs/nfs4proc.c | 23 ++++++++++++++---------
> fs/nfs/pnfs.c | 1 +
> 2 files changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index 519368b98762..ee8efe0a5202 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -437,6 +437,7 @@ static int nfs4_do_handle_exception(struct
> nfs_server *server,
> case -NFS4ERR_DELAY:
> nfs_inc_server_stats(server, NFSIOS_DELAY);
> case -NFS4ERR_GRACE:
> + case -NFS4ERR_LAYOUTTRYLATER:
> case -NFS4ERR_RECALLCONFLICT:
> exception->delay = 1;
> return 0;
> @@ -7883,11 +7884,12 @@ nfs4_layoutget_handle_exception(struct
> rpc_task *task,
> struct 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;
>
> @@ -7919,12 +7921,11 @@ nfs4_layoutget_handle_exception(struct
> rpc_task *task,
> status = -EOVERFLOW;
> goto out;
> }
> - /* Fallthrough */
> + status = -EBUSY;
> + break;
May also want to update the comment above this stanza. It says that we
treat the two cases identically, but I'm not sure that that is valid
now.
> 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;
> @@ -7955,9 +7956,13 @@ nfs4_layoutget_handle_exception(struct
> rpc_task *task,
> spin_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;
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 73b0dc90265a..b5c1306f63c1 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -1648,6 +1648,7 @@ lookup_again:
> atomic_dec(&lo->plh_outstanding);
> if (IS_ERR(lseg)) {
> switch(PTR_ERR(lseg)) {
> + case -EBUSY:
> case -ERECALLCONFLICT:
> if (time_after(jiffies, giveup))
> lseg = NULL;
--
Jeff Layton <jlayton@redhat.com>
next prev parent reply other threads:[~2016-07-15 14:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-14 22:58 [PATCH 1/4] pNFS: Fix post-layoutget error handling in pnfs_update_layout() Trond Myklebust
2016-07-14 22:58 ` [PATCH 2/4] pNFS: Separate handling of NFS4ERR_LAYOUTTRYLATER and RECALLCONFLICT Trond Myklebust
2016-07-14 22:58 ` [PATCH 3/4] pNFS: Handle NFS4ERR_RECALLCONFLICT correctly in LAYOUTGET Trond Myklebust
2016-07-14 22:58 ` [PATCH 4/4] pNFS: Fix LAYOUTGET handling of NFS4ERR_BAD_STATEID and NFS4ERR_EXPIRED Trond Myklebust
2016-07-15 14:38 ` Jeff Layton [this message]
2016-07-14 23:15 ` [PATCH 1/4] pNFS: Fix post-layoutget error handling in pnfs_update_layout() Trond Myklebust
2016-07-15 14:45 ` Jeff Layton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1468593503.3584.3.camel@redhat.com \
--to=jlayton@redhat.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.