From: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> --- fs/nfs/write.c | 18 +++++++++++++----- 1 files changed, 13 insertions(+), 5 deletions(-) diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 482d41e..a47f03d 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -422,6 +422,17 @@ static void nfs_inode_remove_request(struct nfs_page *req) nfs_clear_request(req); nfs_release_request(req); } +static void +nfs_mark_request_nopnfs(struct nfs_page *req) +{ + struct pnfs_layout_segment *lseg = req->wb_lseg; + + if (req->wb_lseg == NULL) + return; + req->wb_lseg = NULL; + put_lseg(lseg); + dprintk(" retry through MDS\n"); +} static void nfs_mark_request_dirty(struct nfs_page *req) @@ -1463,11 +1474,7 @@ static void nfs_commit_release(void *calldata) (long long)req_offset(req)); if (status < 0) { if (req->wb_lseg) { - struct pnfs_layout_segment *lseg = req->wb_lseg; - - req->wb_lseg = NULL; - put_lseg(lseg); - dprintk(" retry through MDS\n"); + nfs_mark_request_nopnfs(req); nfs_mark_request_dirty(req); goto next; } @@ -1487,6 +1494,7 @@ static void nfs_commit_release(void *calldata) } /* We have a mismatch. Write the page again */ dprintk(" mismatch\n"); + nfs_mark_request_nopnfs(req); nfs_mark_request_dirty(req); next: nfs_clear_page_tag_locked(req); -- 1.6.6 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html