|
@@ -438,6 +438,7 @@ nfs_mark_request_commit(struct nfs_page *req)
|
|
|
radix_tree_tag_set(&nfsi->nfs_page_tree,
|
|
|
req->wb_index,
|
|
|
NFS_PAGE_TAG_COMMIT);
|
|
|
+ nfsi->ncommit++;
|
|
|
spin_unlock(&inode->i_lock);
|
|
|
inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
|
|
|
inc_bdi_stat(req->wb_page->mapping->backing_dev_info, BDI_RECLAIMABLE);
|
|
@@ -573,11 +574,15 @@ static int
|
|
|
nfs_scan_commit(struct inode *inode, struct list_head *dst, pgoff_t idx_start, unsigned int npages)
|
|
|
{
|
|
|
struct nfs_inode *nfsi = NFS_I(inode);
|
|
|
+ int ret;
|
|
|
|
|
|
if (!nfs_need_commit(nfsi))
|
|
|
return 0;
|
|
|
|
|
|
- return nfs_scan_list(nfsi, dst, idx_start, npages, NFS_PAGE_TAG_COMMIT);
|
|
|
+ ret = nfs_scan_list(nfsi, dst, idx_start, npages, NFS_PAGE_TAG_COMMIT);
|
|
|
+ if (ret > 0)
|
|
|
+ nfsi->ncommit -= ret;
|
|
|
+ return ret;
|
|
|
}
|
|
|
#else
|
|
|
static inline int nfs_need_commit(struct nfs_inode *nfsi)
|
|
@@ -642,9 +647,10 @@ static struct nfs_page *nfs_try_to_update_request(struct inode *inode,
|
|
|
spin_lock(&inode->i_lock);
|
|
|
}
|
|
|
|
|
|
- if (nfs_clear_request_commit(req))
|
|
|
- radix_tree_tag_clear(&NFS_I(inode)->nfs_page_tree,
|
|
|
- req->wb_index, NFS_PAGE_TAG_COMMIT);
|
|
|
+ if (nfs_clear_request_commit(req) &&
|
|
|
+ radix_tree_tag_clear(&NFS_I(inode)->nfs_page_tree,
|
|
|
+ req->wb_index, NFS_PAGE_TAG_COMMIT) != NULL)
|
|
|
+ NFS_I(inode)->ncommit--;
|
|
|
|
|
|
/* Okay, the request matches. Update the region */
|
|
|
if (offset < req->wb_offset) {
|