mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-17 06:48:07 +00:00
bb34e69f3d
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
63 lines
1.9 KiB
Diff
63 lines
1.9 KiB
Diff
From eeb9b513b81a2ebbb3812150c091ff26ee28d912 Mon Sep 17 00:00:00 2001
|
|
From: Nicholas Bellinger <nab@linux-iscsi.org>
|
|
Date: Thu, 23 Feb 2012 17:28:43 -0800
|
|
Subject: [PATCH 060/147] iscsi-target: Fix iscsit_alloc_buffs() failure cases
|
|
|
|
commit d335e6054db616bce3f040e659fa38440518ad1d upstream.
|
|
|
|
Make iscsit_alloc_buffs() failure case for page_alloc_failed use correct
|
|
__free_page() SGL pointer, and return -ENOMEM for iscsit_allocate_iovecs
|
|
failure to push se_cmd->t_mem_sg release into iscsit_release_cmd()
|
|
callback during iscsit_add_reject_from_cmd() connection reset.
|
|
|
|
Also drop cmd->t_mem_sg = NULL assignment from page_alloc_failed
|
|
failure case.
|
|
|
|
Reported-by: Roland Dreier <roland@purestorage.com>
|
|
Cc: Andy Grover <agrover@redhat.com>
|
|
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/target/iscsi/iscsi_target.c | 14 ++++++--------
|
|
1 file changed, 6 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
|
|
index 03d3528..0842cc7 100644
|
|
--- a/drivers/target/iscsi/iscsi_target.c
|
|
+++ b/drivers/target/iscsi/iscsi_target.c
|
|
@@ -781,7 +781,7 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
|
|
struct scatterlist *sgl;
|
|
u32 length = cmd->se_cmd.data_length;
|
|
int nents = DIV_ROUND_UP(length, PAGE_SIZE);
|
|
- int i = 0, ret;
|
|
+ int i = 0, j = 0, ret;
|
|
/*
|
|
* If no SCSI payload is present, allocate the default iovecs used for
|
|
* iSCSI PDU Header
|
|
@@ -822,17 +822,15 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
|
|
*/
|
|
ret = iscsit_allocate_iovecs(cmd);
|
|
if (ret < 0)
|
|
- goto page_alloc_failed;
|
|
+ return -ENOMEM;
|
|
|
|
return 0;
|
|
|
|
page_alloc_failed:
|
|
- while (i >= 0) {
|
|
- __free_page(sg_page(&sgl[i]));
|
|
- i--;
|
|
- }
|
|
- kfree(cmd->t_mem_sg);
|
|
- cmd->t_mem_sg = NULL;
|
|
+ while (j < i)
|
|
+ __free_page(sg_page(&sgl[j++]));
|
|
+
|
|
+ kfree(sgl);
|
|
return -ENOMEM;
|
|
}
|
|
|
|
--
|
|
1.7.9.4
|
|
|