diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-12-31 09:28:06 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-12-31 15:55:35 -0500 |
commit | b20135d0b2431900a3a5395970ffb7e4f3767c8b (patch) | |
tree | 480ca93f19626e451cb79b35f29ad86d28da0fbb /fs/nfs/pnfs_nfs.c | |
parent | af7cf057933f01dc7f33ddfb5e436ad598ed17ad (diff) | |
download | op-kernel-dev-b20135d0b2431900a3a5395970ffb7e4f3767c8b.zip op-kernel-dev-b20135d0b2431900a3a5395970ffb7e4f3767c8b.tar.gz |
NFSv4.1/pNFS: Don't queue up a new commit if the layout segment is invalid
If the layout segment is invalid, then we should not be adding more
write requests to the commit list. Instead, those writes should be
replayed after requesting a new layout.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/pnfs_nfs.c')
-rw-r--r-- | fs/nfs/pnfs_nfs.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c index 3c8e3a4..81ac648 100644 --- a/fs/nfs/pnfs_nfs.c +++ b/fs/nfs/pnfs_nfs.c @@ -868,6 +868,11 @@ pnfs_layout_mark_request_commit(struct nfs_page *req, buckets = cinfo->ds->buckets; list = &buckets[ds_commit_idx].written; if (list_empty(list)) { + if (!pnfs_is_valid_lseg(lseg)) { + spin_unlock(cinfo->lock); + cinfo->completion_ops->resched_write(cinfo, req); + return; + } /* Non-empty buckets hold a reference on the lseg. That ref * is normally transferred to the COMMIT call and released * there. It could also be released if the last req is pulled |