diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-09 13:54:53 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-09 15:17:49 -0400 |
commit | 0427708657750bdc03af3491a0297cab5e7efabf (patch) | |
tree | 50b754a332cb763c8e5349d55e38db4d85521ea9 /fs/nfs/direct.c | |
parent | 1d1afcbc294cc7c788eb5c7b6b98e8d63caf002c (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.c | 15 |
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 | } |