aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBoaz Harrosh <bharrosh@panasas.com>2010-10-19 14:21:34 +0200
committerJames Bottomley <James.Bottomley@suse.de>2010-10-26 10:42:31 -0500
commitc4df46c49d8677158c7fb070a08e0d386c80205f (patch)
tree186445dd72adb59b8a4f3b7ab8051d7e1f787f97
parent[SCSI] libosd: Fix bug in attr_page handling (diff)
downloadlinux-dev-c4df46c49d8677158c7fb070a08e0d386c80205f.tar.xz
linux-dev-c4df46c49d8677158c7fb070a08e0d386c80205f.zip
[SCSI] libosd: Free resources in reverse order of allocation
At osd_end_request first free the request that might point to pages, then free these pages. In reverse order of allocation. For now it's just anal neatness. When we'll use mempools It'll also pay in performance. Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r--drivers/scsi/osd/osd_initiator.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c
index 771ab121acc7..acbdcb670ac5 100644
--- a/drivers/scsi/osd/osd_initiator.c
+++ b/drivers/scsi/osd/osd_initiator.c
@@ -452,10 +452,6 @@ void osd_end_request(struct osd_request *or)
{
struct request *rq = or->request;
- _osd_free_seg(or, &or->set_attr);
- _osd_free_seg(or, &or->enc_get_attr);
- _osd_free_seg(or, &or->get_attr);
-
if (rq) {
if (rq->next_rq) {
_put_request(rq->next_rq);
@@ -464,6 +460,11 @@ void osd_end_request(struct osd_request *or)
_put_request(rq);
}
+
+ _osd_free_seg(or, &or->get_attr);
+ _osd_free_seg(or, &or->enc_get_attr);
+ _osd_free_seg(or, &or->set_attr);
+
_osd_request_free(or);
}
EXPORT_SYMBOL(osd_end_request);