NFS cleanup: speed up nfs_scan_commit using radix tree tags
Add a tag for requests that are waiting for a COMMIT Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -462,6 +462,9 @@ nfs_mark_request_commit(struct nfs_page *req)
|
||||
nfs_list_add_request(req, &nfsi->commit);
|
||||
nfsi->ncommit++;
|
||||
set_bit(PG_NEED_COMMIT, &(req)->wb_flags);
|
||||
radix_tree_tag_set(&nfsi->nfs_page_tree,
|
||||
req->wb_index,
|
||||
NFS_PAGE_TAG_COMMIT);
|
||||
spin_unlock(&nfsi->req_lock);
|
||||
inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
|
||||
__mark_inode_dirty(inode, I_DIRTY_DATASYNC);
|
||||
@@ -575,7 +578,8 @@ nfs_scan_commit(struct inode *inode, struct list_head *dst, pgoff_t idx_start, u
|
||||
int res = 0;
|
||||
|
||||
if (nfsi->ncommit != 0) {
|
||||
res = nfs_scan_list(nfsi, &nfsi->commit, dst, idx_start, npages);
|
||||
res = nfs_scan_list(nfsi, dst, idx_start, npages,
|
||||
NFS_PAGE_TAG_COMMIT);
|
||||
nfsi->ncommit -= res;
|
||||
if ((nfsi->ncommit == 0) != list_empty(&nfsi->commit))
|
||||
printk(KERN_ERR "NFS: desynchronized value of nfs_i.ncommit.\n");
|
||||
|
Reference in New Issue
Block a user