All of lore.kernel.org
 help / color / mirror / Atom feed
From: Trond Myklebust <Trond.Myklebust@netapp.com>
To: linux-nfs@vger.kernel.org
Subject: [PATCH 02/14] NFSv4.1: pnfs_layout_io_test_failed must clear invalid lsegs before a retry
Date: Thu, 20 Sep 2012 21:35:45 -0400	[thread overview]
Message-ID: <1348191357-44503-2-git-send-email-Trond.Myklebust@netapp.com> (raw)
In-Reply-To: <1348191357-44503-1-git-send-email-Trond.Myklebust@netapp.com>

If pnfs_layout_io_test_failed() authorises a retry of the failed layoutgets,
it should first clear the existing layout segments so that we start afresh.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---
 fs/nfs/pnfs.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index cbbb0fc..80aaaba 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -256,7 +256,8 @@ pnfs_layout_io_set_failed(struct pnfs_layout_hdr *lo, u32 iomode)
 }
 
 static bool
-pnfs_layout_io_test_failed(struct pnfs_layout_hdr *lo, u32 iomode)
+pnfs_layout_io_test_failed(struct pnfs_layout_hdr *lo, u32 iomode,
+		struct list_head *head)
 {
 	unsigned long start, end;
 	if (test_bit(pnfs_iomode_to_fail_bit(iomode), &lo->plh_flags) == 0)
@@ -267,6 +268,7 @@ pnfs_layout_io_test_failed(struct pnfs_layout_hdr *lo, u32 iomode)
 		/* It is time to retry the failed layoutgets */
 		clear_bit(NFS_LAYOUT_RW_FAILED, &lo->plh_flags);
 		clear_bit(NFS_LAYOUT_RO_FAILED, &lo->plh_flags);
+		pnfs_mark_matching_lsegs_invalid(lo, head, NULL);
 		return false;
 	}
 	return true;
@@ -1058,6 +1060,7 @@ pnfs_update_layout(struct inode *ino,
 	struct nfs_client *clp = server->nfs_client;
 	struct pnfs_layout_hdr *lo;
 	struct pnfs_layout_segment *lseg = NULL;
+	LIST_HEAD(tmp_list);
 	bool first = false;
 
 	if (!pnfs_enabled_sb(NFS_SERVER(ino)))
@@ -1081,7 +1084,7 @@ pnfs_update_layout(struct inode *ino,
 	}
 
 	/* if LAYOUTGET already failed once we don't try again */
-	if (pnfs_layout_io_test_failed(nfsi->layout, iomode))
+	if (pnfs_layout_io_test_failed(nfsi->layout, iomode, &tmp_list))
 		goto out_unlock;
 
 	/* Check to see if the layout for the given range already exists */
@@ -1127,6 +1130,7 @@ pnfs_update_layout(struct inode *ino,
 	}
 	atomic_dec(&lo->plh_outstanding);
 out:
+	pnfs_free_lseg_list(&tmp_list);
 	pnfs_put_layout_hdr(lo);
 	dprintk("%s end, state 0x%lx lseg %p\n", __func__,
 		nfsi->layout ? nfsi->layout->plh_flags : -1, lseg);
-- 
1.7.11.4


  reply	other threads:[~2012-09-21  1:36 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-21  1:35 [PATCH 01/14] NFSv4.1: Fix a reference leak in pnfs_update_layout Trond Myklebust
2012-09-21  1:35 ` Trond Myklebust [this message]
2012-09-21  1:35   ` [PATCH 03/14] NFSv4.1: Fix a race in the pNFS return-on-close code Trond Myklebust
2012-09-21  1:35     ` [PATCH 04/14] NFSv4.1: Simplify " Trond Myklebust
2012-09-21  1:35       ` [PATCH 05/14] NFSv4.1: Get rid of pNFS layout state "NFS_LAYOUT_INVALID" Trond Myklebust
2012-09-21  1:35         ` [PATCH 06/14] NFSv4.1: reset the inode MDS threshold counters on layout destruction Trond Myklebust
2012-09-21  1:35           ` [PATCH 07/14] NFSv4.1: Rename the pnfs_put_lseg_common to pnfs_layout_remove_lseg Trond Myklebust
2012-09-21  1:35             ` [PATCH 08/14] NFSv4.1: Remove redundant reference to the pnfs_layout_hdr Trond Myklebust
2012-09-21  1:35               ` [PATCH 09/14] NFSv4.1: Free the pnfs_layout_hdr outside the inode->i_lock Trond Myklebust
2012-09-21  1:35                 ` [PATCH 10/14] NFSv4.1: Clean up the removal of pnfs_layout_hdr from the server list Trond Myklebust
2012-09-21  1:35                   ` [PATCH 11/14] NFSv4.1: Clean up pnfs_put_lseg() Trond Myklebust
2012-09-21  1:35                     ` [PATCH 12/14] NFSv4.1: Balance pnfs_layout_hdr refcount in pnfs_layout_(insert|remove)_lseg Trond Myklebust
2012-09-21  1:35                       ` [PATCH 13/14] NFSv4.1: Get rid of pNFS spin lock debugging asserts Trond Myklebust
2012-09-21  1:35                         ` [PATCH 14/14] NFSv4.1: Remove unused 'default allocation' for pnfs_alloc_layout_hdr() Trond Myklebust

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=1348191357-44503-2-git-send-email-Trond.Myklebust@netapp.com \
    --to=trond.myklebust@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    /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.