diff options
Diffstat (limited to 'fs/nfs/write.c')
| -rw-r--r-- | fs/nfs/write.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index af0c6279a4a..e4cbc11a74a 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -542,11 +542,15 @@ nfs_scan_commit(struct inode *inode, struct list_head *dst, pgoff_t idx_start, u  	if (!nfs_need_commit(nfsi))  		return 0; +	spin_lock(&inode->i_lock);  	ret = nfs_scan_list(nfsi, dst, idx_start, npages, NFS_PAGE_TAG_COMMIT);  	if (ret > 0)  		nfsi->ncommit -= ret; +	spin_unlock(&inode->i_lock); +  	if (nfs_need_commit(NFS_I(inode)))  		__mark_inode_dirty(inode, I_DIRTY_DATASYNC); +  	return ret;  }  #else @@ -1483,9 +1487,7 @@ int nfs_commit_inode(struct inode *inode, int how)  	res = nfs_commit_set_lock(NFS_I(inode), may_wait);  	if (res <= 0)  		goto out_mark_dirty; -	spin_lock(&inode->i_lock);  	res = nfs_scan_commit(inode, &head, 0, 0); -	spin_unlock(&inode->i_lock);  	if (res) {  		int error;  | 
