diff options
author | Trond Myklebust <trondmy@gmail.com> | 2020-01-06 21:25:04 +0100 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2020-01-15 16:54:32 +0100 |
commit | 221203ce6406273cf00e5c6397257d986c003ee6 (patch) | |
tree | 5f85cd8eb76e1af612502fd0a7fe8760d7561910 /fs/nfs/write.c | |
parent | NFS: Fix up fsync() when the server rebooted (diff) | |
download | linux-221203ce6406273cf00e5c6397257d986c003ee6.tar.xz linux-221203ce6406273cf00e5c6397257d986c003ee6.zip |
NFS/pnfs: Fix pnfs_generic_prepare_to_resend_writes()
Instead of making assumptions about the commit verifier contents, change
the commit code to ensure we always check that the verifier was set
by the XDR code.
Fixes: f54bcf2ecee9 ("pnfs: Prepare for flexfiles by pulling out common code")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to '')
-rw-r--r-- | fs/nfs/write.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 6dd8d6e6d847..c86fc9efd99b 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1840,6 +1840,7 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata) static void nfs_commit_release_pages(struct nfs_commit_data *data) { + const struct nfs_writeverf *verf = data->res.verf; struct nfs_page *req; int status = data->task.tk_status; struct nfs_commit_info cinfo; @@ -1868,7 +1869,8 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data) /* Okay, COMMIT succeeded, apparently. Check the verifier * returned by the server against all stored verfs. */ - if (!nfs_write_verifier_cmp(&req->wb_verf, &data->verf.verifier)) { + if (verf->committed > NFS_UNSTABLE && + !nfs_write_verifier_cmp(&req->wb_verf, &verf->verifier)) { /* We have a match */ if (req->wb_page) nfs_inode_remove_request(req); |