diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-04-29 10:27:18 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-04-29 11:29:24 -0400 |
commit | 722f0b891198ab1f5f7b020e32c989a517ed0577 (patch) | |
tree | 65598040e3cdf8a72962538adcef8d625fb4678f /fs | |
parent | 37f8aa16da8e9239092429e7a6dadf352897a92d (diff) | |
download | op-kernel-dev-722f0b891198ab1f5f7b020e32c989a517ed0577.zip op-kernel-dev-722f0b891198ab1f5f7b020e32c989a517ed0577.tar.gz |
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/pnfs_nfs.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c index dc4111d..7697ac0 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; |