Commit 04277086 authored by Trond Myklebust's avatar Trond Myklebust

NFS: Clean up - Simplify reference counting in fs/nfs/direct.c

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Cc: Fred Isaman <iisaman@netapp.com>
parent 1d1afcbc
...@@ -486,10 +486,8 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq) ...@@ -486,10 +486,8 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq)
} }
nfs_pageio_complete(&desc); nfs_pageio_complete(&desc);
while (!list_empty(&failed)) { while (!list_empty(&failed))
nfs_release_request(req);
nfs_unlock_and_release_request(req); nfs_unlock_and_release_request(req);
}
if (put_dreq(dreq)) if (put_dreq(dreq))
nfs_direct_write_complete(dreq, dreq->inode); nfs_direct_write_complete(dreq, dreq->inode);
...@@ -518,9 +516,9 @@ static void nfs_direct_commit_complete(struct nfs_commit_data *data) ...@@ -518,9 +516,9 @@ static void nfs_direct_commit_complete(struct nfs_commit_data *data)
nfs_list_remove_request(req); nfs_list_remove_request(req);
if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) { if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) {
/* Note the rewrite will go through mds */ /* Note the rewrite will go through mds */
kref_get(&req->wb_kref);
nfs_mark_request_commit(req, NULL, &cinfo); nfs_mark_request_commit(req, NULL, &cinfo);
} else }
nfs_release_request(req);
nfs_unlock_and_release_request(req); nfs_unlock_and_release_request(req);
} }
...@@ -657,13 +655,11 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_pageio_descriptor *d ...@@ -657,13 +655,11 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_pageio_descriptor *d
break; break;
} }
nfs_lock_request(req); nfs_lock_request(req);
kref_get(&req->wb_kref);
req->wb_index = pos >> PAGE_SHIFT; req->wb_index = pos >> PAGE_SHIFT;
req->wb_offset = pos & ~PAGE_MASK; req->wb_offset = pos & ~PAGE_MASK;
if (!nfs_pageio_add_request(desc, req)) { if (!nfs_pageio_add_request(desc, req)) {
result = desc->pg_error; result = desc->pg_error;
nfs_unlock_and_release_request(req); nfs_unlock_and_release_request(req);
nfs_release_request(req);
break; break;
} }
pgbase = 0; pgbase = 0;
...@@ -734,10 +730,8 @@ static void nfs_direct_write_completion(struct nfs_pgio_header *hdr) ...@@ -734,10 +730,8 @@ static void nfs_direct_write_completion(struct nfs_pgio_header *hdr)
switch (bit) { switch (bit) {
case NFS_IOHDR_NEED_RESCHED: case NFS_IOHDR_NEED_RESCHED:
case NFS_IOHDR_NEED_COMMIT: case NFS_IOHDR_NEED_COMMIT:
kref_get(&req->wb_kref);
nfs_mark_request_commit(req, hdr->lseg, &cinfo); nfs_mark_request_commit(req, hdr->lseg, &cinfo);
break;
default:
nfs_release_request(req);
} }
nfs_unlock_and_release_request(req); nfs_unlock_and_release_request(req);
} }
...@@ -755,7 +749,6 @@ static void nfs_write_sync_pgio_error(struct list_head *head) ...@@ -755,7 +749,6 @@ static void nfs_write_sync_pgio_error(struct list_head *head)
while (!list_empty(head)) { while (!list_empty(head)) {
req = nfs_list_entry(head->next); req = nfs_list_entry(head->next);
nfs_list_remove_request(req); nfs_list_remove_request(req);
nfs_release_request(req);
nfs_unlock_and_release_request(req); nfs_unlock_and_release_request(req);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment