aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2017-04-29 10:27:18 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2017-04-29 11:29:24 -0400
commit722f0b891198ab1f5f7b020e32c989a517ed0577 (patch)
tree65598040e3cdf8a72962538adcef8d625fb4678f
parentpNFS/flexfiles: Fix up the ff_layout_write_pagelist failure path (diff)
downloadlinux-dev-722f0b891198ab1f5f7b020e32c989a517ed0577.tar.xz
linux-dev-722f0b891198ab1f5f7b020e32c989a517ed0577.zip
pNFS: Don't send COMMITs to the DSes if the server invalidated our layout
If the layout was invalidated, then assume we should requeue all the pending writes for the DS in question. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
-rw-r--r--fs/nfs/pnfs_nfs.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c
index dc4111d08a27..7697ac0ff81a 100644
--- a/fs/nfs/pnfs_nfs.c
+++ b/fs/nfs/pnfs_nfs.c
@@ -217,6 +217,13 @@ pnfs_generic_alloc_ds_commits(struct nfs_commit_info *cinfo,
for (i = 0; i < fl_cinfo->nbuckets; i++, bucket++) {
if (list_empty(&bucket->committing))
continue;
+ /*
+ * If the layout segment is invalid, then let
+ * pnfs_generic_retry_commit() clean up the bucket.
+ */
+ if (!pnfs_is_valid_lseg(bucket->clseg) &&
+ !test_bit(NFS_LSEG_LAYOUTRETURN, &bucket->clseg->pls_flags))
+ continue;
data = nfs_commitdata_alloc(false);
if (!data)
break;