|
@@ -908,6 +908,16 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
int stable = *stablep;
|
|
int stable = *stablep;
|
|
int use_wgather;
|
|
int use_wgather;
|
|
loff_t pos = offset;
|
|
loff_t pos = offset;
|
|
|
|
+ unsigned int pflags = current->flags;
|
|
|
|
+
|
|
|
|
+ if (rqstp->rq_local)
|
|
|
|
+ /*
|
|
|
|
+ * We want less throttling in balance_dirty_pages()
|
|
|
|
+ * and shrink_inactive_list() so that nfs to
|
|
|
|
+ * localhost doesn't cause nfsd to lock up due to all
|
|
|
|
+ * the client's dirty pages or its congested queue.
|
|
|
|
+ */
|
|
|
|
+ current->flags |= PF_LESS_THROTTLE;
|
|
|
|
|
|
dentry = file->f_path.dentry;
|
|
dentry = file->f_path.dentry;
|
|
inode = dentry->d_inode;
|
|
inode = dentry->d_inode;
|
|
@@ -941,6 +951,8 @@ out_nfserr:
|
|
err = 0;
|
|
err = 0;
|
|
else
|
|
else
|
|
err = nfserrno(host_err);
|
|
err = nfserrno(host_err);
|
|
|
|
+ if (rqstp->rq_local)
|
|
|
|
+ tsk_restore_flags(current, pflags, PF_LESS_THROTTLE);
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|