summaryrefslogtreecommitdiffstats
path: root/fs/nfs/direct.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-05-09 13:54:53 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-05-09 15:17:49 -0400
commit0427708657750bdc03af3491a0297cab5e7efabf (patch)
tree50b754a332cb763c8e5349d55e38db4d85521ea9 /fs/nfs/direct.c
parent1d1afcbc294cc7c788eb5c7b6b98e8d63caf002c (diff)
NFS: Clean up - Simplify reference counting in fs/nfs/direct.c
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Cc: Fred Isaman <iisaman@netapp.com>
Diffstat (limited to 'fs/nfs/direct.c')
-rw-r--r--fs/nfs/direct.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index 845e20196803..c47a46eaf905 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -486,10 +486,8 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq)
486 } 486 }
487 nfs_pageio_complete(&desc); 487 nfs_pageio_complete(&desc);
488 488
489 while (!list_empty(&failed)) { 489 while (!list_empty(&failed))
490 nfs_release_request(req);
491 nfs_unlock_and_release_request(req); 490 nfs_unlock_and_release_request(req);
492 }
493 491
494 if (put_dreq(dreq)) 492 if (put_dreq(dreq))
495 nfs_direct_write_complete(dreq, dreq->inode); 493 nfs_direct_write_complete(dreq, dreq->inode);
@@ -518,9 +516,9 @@ static void nfs_direct_commit_complete(struct nfs_commit_data *data)
518 nfs_list_remove_request(req); 516 nfs_list_remove_request(req);
519 if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) { 517 if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) {
520 /* Note the rewrite will go through mds */ 518 /* Note the rewrite will go through mds */
519 kref_get(&req->wb_kref);
521 nfs_mark_request_commit(req, NULL, &cinfo); 520 nfs_mark_request_commit(req, NULL, &cinfo);
522 } else 521 }
523 nfs_release_request(req);
524 nfs_unlock_and_release_request(req); 522 nfs_unlock_and_release_request(req);
525 } 523 }
526 524
@@ -657,13 +655,11 @@ static ssize_t nfs_direct_write_schedule_segment(struct nfs_pageio_descriptor *d
657 break; 655 break;
658 } 656 }
659 nfs_lock_request(req); 657 nfs_lock_request(req);
660 kref_get(&req->wb_kref);
661 req->wb_index = pos >> PAGE_SHIFT; 658 req->wb_index = pos >> PAGE_SHIFT;
662 req->wb_offset = pos & ~PAGE_MASK; 659 req->wb_offset = pos & ~PAGE_MASK;
663 if (!nfs_pageio_add_request(desc, req)) { 660 if (!nfs_pageio_add_request(desc, req)) {
664 result = desc->pg_error; 661 result = desc->pg_error;
665 nfs_unlock_and_release_request(req); 662 nfs_unlock_and_release_request(req);
666 nfs_release_request(req);
667 break; 663 break;
668 } 664 }
669 pgbase = 0; 665 pgbase = 0;
@@ -734,10 +730,8 @@ static void nfs_direct_write_completion(struct nfs_pgio_header *hdr)
734 switch (bit) { 730 switch (bit) {
735 case NFS_IOHDR_NEED_RESCHED: 731 case NFS_IOHDR_NEED_RESCHED:
736 case NFS_IOHDR_NEED_COMMIT: 732 case NFS_IOHDR_NEED_COMMIT:
733 kref_get(&req->wb_kref);
737 nfs_mark_request_commit(req, hdr->lseg, &cinfo); 734 nfs_mark_request_commit(req, hdr->lseg, &cinfo);
738 break;
739 default:
740 nfs_release_request(req);
741 } 735 }
742 nfs_unlock_and_release_request(req); 736 nfs_unlock_and_release_request(req);
743 } 737 }
@@ -755,7 +749,6 @@ static void nfs_write_sync_pgio_error(struct list_head *head)
755 while (!list_empty(head)) { 749 while (!list_empty(head)) {
756 req = nfs_list_entry(head->next); 750 req = nfs_list_entry(head->next);
757 nfs_list_remove_request(req); 751 nfs_list_remove_request(req);
758 nfs_release_request(req);
759 nfs_unlock_and_release_request(req); 752 nfs_unlock_and_release_request(req);
760 } 753 }
761} 754}