All of lore.kernel.org
 help / color / mirror / Atom feed
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>

  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.