NFS: don't use FLUSH_SYNC on WB_SYNC_NONE COMMIT calls (try #2)
WB_SYNC_NONE is supposed to mean "don't wait on anything". That should also include not waiting for COMMIT calls to complete. WB_SYNC_NONE is also implied when wbc->nonblocking and wbc->for_background are set, so we can replace those checks in nfs_commit_unstable_pages with a check for WB_SYNC_NONE. Signed-off-by: Jeff Layton <jlayton@redhat.com> Reviewed-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
5c78f58e2d
commit
a00dd6c03d
|
@ -1431,15 +1431,17 @@ static int nfs_commit_unstable_pages(struct inode *inode, struct writeback_contr
|
||||||
int flags = FLUSH_SYNC;
|
int flags = FLUSH_SYNC;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* Don't commit yet if this is a non-blocking flush and there are
|
if (wbc->sync_mode == WB_SYNC_NONE) {
|
||||||
* lots of outstanding writes for this mapping.
|
/* Don't commit yet if this is a non-blocking flush and there
|
||||||
|
* are a lot of outstanding writes for this mapping.
|
||||||
*/
|
*/
|
||||||
if (wbc->sync_mode == WB_SYNC_NONE &&
|
if (nfsi->ncommit <= (nfsi->npages >> 1))
|
||||||
nfsi->ncommit <= (nfsi->npages >> 1))
|
|
||||||
goto out_mark_dirty;
|
goto out_mark_dirty;
|
||||||
|
|
||||||
if (wbc->nonblocking || wbc->for_background)
|
/* don't wait for the COMMIT response */
|
||||||
flags = 0;
|
flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
ret = nfs_commit_inode(inode, flags);
|
ret = nfs_commit_inode(inode, flags);
|
||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
if (wbc->sync_mode == WB_SYNC_NONE) {
|
if (wbc->sync_mode == WB_SYNC_NONE) {
|
||||||
|
|
Loading…
Reference in New Issue