* [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion
@ 2011-06-04 1:18 Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page Nicholas A. Bellinger
` (6 more replies)
0 siblings, 7 replies; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
Hi Andy and Christoph,
This series addresses some issues that have appeared during recent testing on
lio-core-2.6.git/master (v3.0.0-rc1) with the iscsi-target patches from
to convert direct usage of struct iscsi_cmd->se_cmd.t_mem_list into struct
iscsi_cmd->t_mem_sg[] using iscsit_alloc_buffs() + iscsit_map_iovec(), and
sendpage() in the outgoing TX path.
Patch #1 involves changes to iscsit_alloc_buffs() required to properly handle
offset_in_page() from kmalloc() with SCF_SCSI_CONTROL_NONSG_IO_CDB payloads
required for initial INQUIRY + REPORT_LUNs, SCAN et al to function..
Patch #2 fixes a payload length padding bug in iscsit_send_data_in() that was
causing problems, and Patch #3 is a bugfux for iscsit_target_tx_thread() to disable
sendpage() with map_sg=0 for non ISTATE_SEND_DATAIN outgoing payload ops that was
causing a seperate OOPs.
Patch #5 addresses the transport_generic_new_cmd() failure in iscsit_handle_scsi_cmd(),
and Patch #6->#7 contain two bugfixes required for I/O payloads to function using
non PAGE_SIZE iSCSI MaxRecvDataSegmentLength with new scatterlist mapping logic in
iscsit_map_iovec() and iscsit_fe_sendpage_sg() respectively.
Finally, Patch #8 addresses a seperate iscsit_do_crypto_hash_sg() SGL pointer walk
bug also introduced with the recent merge.
This series is now passing initial MRDSL walking tests w/ 512 byte increments using
randrw verify fio tests for SCF_SCSI_DATA_SG_IO_CDB and SCF_SCSI_CONTROL_SG_IO_CDB
payloads, but still needs more needs more max_sectors backend testing with new
immediate data WRITEs -> transport_generic_map_mem_to_cmd() usage, and also verified
with MRDSL < 8192 cases with contiguous buffers for SCF_SCSI_CONTROL_NONSG_IO_CDB.
Please have a look and comment.
Thanks,
--nab
Nicholas Bellinger (7):
iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page
iscsi-target: Fix padding breakage in iscsit_send_data_in
iscsi-target: Clear map_sg usage for non ISTATE_SEND_DATAIN ops
iscsi-target: Handle transport_generic_new_cmd failure
iscsi-target: Fix iscsit_map_iovec cur_len + data_offset breakage
iscsi-target: Fix iscsit_fe_sendpage_sg breakage
iscsi-target: Fix iscsit_do_crypto_hash_sg() bug
drivers/target/iscsi/iscsi_target.c | 106 ++++++++++++++++++------------
drivers/target/iscsi/iscsi_target_util.c | 15 ++--
2 files changed, 72 insertions(+), 49 deletions(-)
--
1.7.2.5
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
2011-06-04 14:21 ` Christoph Hellwig
2011-06-04 1:18 ` [PATCH 2/7] iscsi-target: Fix padding breakage in iscsit_send_data_in Nicholas A. Bellinger
` (5 subsequent siblings)
6 siblings, 1 reply; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch changes iscsit_alloc_buffs() w/ SCF_SCSI_CONTROL_NONSG_IO_CDB
to take into account the offset_in_page(), and also handles the case
where length and PAGE_SIZE are identical, and require nents to be incremented.
It also moves iscsit_allocate_iovecs() for the SCSI payload case until
after transport_generic_map_mem_to_cmd() has been called because the
iovec allocation depends upon cmd->se_cmd.t_tasks_se_num having been
set by the return of transport_map_sg_to_mem() done in RX thread context.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target.c | 78 +++++++++++++++++++++++------------
1 files changed, 52 insertions(+), 26 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 2503ef3..959f616 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -779,27 +779,17 @@ static int iscsit_allocate_iovecs(struct iscsi_cmd *cmd)
static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
{
- u32 length = cmd->se_cmd.data_length;
struct scatterlist *sgl;
+ void *buf, *cur;
+ u32 length = cmd->se_cmd.data_length;
int nents = DIV_ROUND_UP(length, PAGE_SIZE);
- int i;
- void *buf;
- void *cur;
- int ret;
-
- /* Even no-length cmds need some iovecs, apparently? */
- ret = iscsit_allocate_iovecs(cmd);
- if (ret < 0)
- return ret;
-
+ int i = 0, ret;
+ /*
+ * If no SCSI payload is present, allocate the default iovecs used for
+ * iSCSI PDU Header
+ */
if (!length)
- return 0;
-
- sgl = kzalloc(sizeof(*sgl) * nents, GFP_KERNEL);
- if (!sgl)
- return -ENOMEM;
- sg_init_table(sgl, nents);
-
+ return iscsit_allocate_iovecs(cmd);
/*
* Allocate from slab if nonsg, but sgl should point
* to the malloced mem.
@@ -807,17 +797,38 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
* Alloc pages if sg.
*/
if (cmd->se_cmd.se_cmd_flags & SCF_SCSI_CONTROL_NONSG_IO_CDB) {
+ int pg_off = 0, buf_size;
buf = kmalloc(length, GFP_KERNEL);
if (!buf)
return -ENOMEM;
+ /*
+ * Allocate extra SGL for offset_in_page exceeding DIV_ROUND_UP
+ */
+ pg_off = offset_in_page(buf);
+ if ((pg_off + length) > (PAGE_SIZE * nents))
+ nents++;
+
+ sgl = kzalloc(sizeof(*sgl) * nents, GFP_KERNEL);
+ if (!sgl)
+ return -ENOMEM;
+ sg_init_table(sgl, nents);
cur = buf;
while (length) {
- int buf_size = min_t(int, length, PAGE_SIZE);
-
+ if (pg_off != 0) {
+ buf_size = min_t(int, PAGE_SIZE - pg_off, length);
+ pg_off = 0;
+ } else
+ buf_size = min_t(int, length, PAGE_SIZE);
+
sg_set_buf(&sgl[i], cur, buf_size);
+ if (sgl[i].length < 0) {
+ printk("sg_set_buf: page: %p, len: %d, offset: %d\n",
+ sg_page(&sgl[i]), sgl[i].length, sgl[i].offset);
+ BUG();
+ }
length -= buf_size;
cur += buf_size;
i++;
@@ -826,7 +837,12 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
cmd->t_mem = buf;
} else {
- i = 0;
+ sgl = kzalloc(sizeof(*sgl) * nents, GFP_KERNEL);
+ if (!sgl)
+ return -ENOMEM;
+
+ sg_init_table(sgl, nents);
+
while (length) {
int buf_size = min_t(int, length, PAGE_SIZE);
struct page *page;
@@ -849,6 +865,13 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
/* make se_mem list from the memory */
transport_generic_map_mem_to_cmd(&cmd->se_cmd, sgl, nents, NULL, 0);
+ /*
+ * Allocate iovecs for SCSI payload after transport_generic_map_mem_to_cmd
+ * so that cmd->se_cmd.t_tasks_se_num has been set.
+ */
+ ret = iscsit_allocate_iovecs(cmd);
+ if (ret < 0)
+ goto page_alloc_failed;
return 0;
@@ -1081,12 +1104,15 @@ attach_cmd:
* Active/NonOptimized primary access state..
*/
core_alua_check_nonop_delay(SE_CMD(cmd));
-
+ /*
+ * Allocate and setup SGL used with transport_generic_map_mem_to_cmd().
+ * also call iscsit_allocate_iovecs()
+ */
ret = iscsit_alloc_buffs(cmd);
- if (ret < 0) {
- return ret;
- }
-
+ if (ret < 0)
+ return iscsit_add_reject_from_cmd(
+ ISCSI_REASON_BOOKMARK_NO_RESOURCES,
+ 1, 1, buf, cmd);
/*
* Check the CmdSN against ExpCmdSN/MaxCmdSN here if
* the Immediate Bit is not set, and no Immediate
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/7] iscsi-target: Fix padding breakage in iscsit_send_data_in
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 3/7] iscsi-target: Clear map_sg usage for non ISTATE_SEND_DATAIN ops Nicholas A. Bellinger
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch adds the missing cmd->padding assignment in iscsit_send_data_in()
that is required for proper iscsit_fe_sendpage_sg() operation.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 959f616..5a14318 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -2508,7 +2508,6 @@ static int iscsit_send_data_in(
struct iscsi_datain_req *dr;
struct iscsi_data_rsp *hdr;
struct kvec *iov;
- u32 padding;
memset(&datain, 0, sizeof(struct iscsi_datain));
dr = iscsit_get_datain_values(cmd, &datain);
@@ -2612,8 +2611,8 @@ static int iscsit_send_data_in(
iov_count += iov_ret;
tx_size += datain.length;
- padding = ((-datain.length) & 3);
- if (padding) {
+ cmd->padding = ((-datain.length) & 3);
+ if (cmd->padding) {
iov[iov_count].iov_base = cmd->pad_bytes;
iov[iov_count++].iov_len = cmd->padding;
tx_size += cmd->padding;
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/7] iscsi-target: Clear map_sg usage for non ISTATE_SEND_DATAIN ops
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 2/7] iscsi-target: Fix padding breakage in iscsit_send_data_in Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 4/7] iscsi-target: Handle transport_generic_new_cmd failure Nicholas A. Bellinger
` (3 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes a bug in iscsi_target_tx_thread() where 'map_sg' was not
being cleared after ISTATE_SEND_DATAIN and causing iscsit_fe_sendpage_sg()
to be called for non ISTATE_SEND_DATAIN + non ISCSI_OP_SCSI_CMD payloads.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 5a14318..8dedfbf 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -3743,6 +3743,7 @@ check_rsp_state:
goto transport_err;
}
}
+ map_sg = 0;
iscsit_unmap_iovec(cmd);
spin_lock_bh(&cmd->istate_lock);
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/7] iscsi-target: Handle transport_generic_new_cmd failure
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
` (2 preceding siblings ...)
2011-06-04 1:18 ` [PATCH 3/7] iscsi-target: Clear map_sg usage for non ISTATE_SEND_DATAIN ops Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
2011-06-04 14:00 ` Christoph Hellwig
2011-06-04 1:18 ` [PATCH 5/7] iscsi-target: Fix iscsit_map_iovec cur_len + data_offset breakage Nicholas A. Bellinger
` (2 subsequent siblings)
6 siblings, 1 reply; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch updates iscsit_handle_scsi_cmd() to handle transport_generic_new_cmd()
failures using iscsit_add_reject_from_cmd(), and updates the comment.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 8dedfbf..6ebc247 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1162,13 +1162,11 @@ attach_cmd:
goto after_immediate_data;
}
/*
- * Call into transport_generic_handle_cdb() that now translates
- * into a direct transport_generic_new_cmd() call with a NULL
- * se_cmd->se_tfo->new_cmd_map() pointer.
+ * Call directly into transport_generic_new_cmd() to perform
+ * the backend memory allocation.
*/
- transport_generic_new_cmd(SE_CMD(cmd));
-
- if (SE_CMD(cmd)->se_cmd_flags & SCF_SE_CMD_FAILED) {
+ ret = transport_generic_new_cmd(&cmd->se_cmd);
+ if ((ret < 0) || (SE_CMD(cmd)->se_cmd_flags & SCF_SE_CMD_FAILED)) {
immed_ret = IMMEDIATE_DATA_NORMAL_OPERATION;
dump_immediate_data = 1;
goto after_immediate_data;
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/7] iscsi-target: Fix iscsit_map_iovec cur_len + data_offset breakage
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
` (3 preceding siblings ...)
2011-06-04 1:18 ` [PATCH 4/7] iscsi-target: Handle transport_generic_new_cmd failure Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 6/7] iscsi-target: Fix iscsit_fe_sendpage_sg breakage Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 7/7] iscsi-target: Fix iscsit_do_crypto_hash_sg() bug Nicholas A. Bellinger
6 siblings, 0 replies; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes two length + offset releated bugs in the new iscsit_map_iovec().
The first is where cur_len was being calculated incorrectly for the case type
SCF_SCSI_CONTROL_NONSG_IO_CDB with an sg->offset non zero offset.
The second adds the missing pg_off to kmap() when setting iov_base
from sg_page() with the current scatterlist pointer.
It also converts iscsit_map_iovec() to use sg_next() instead of
incremented the scatterlist pointer following lib/scatterlist.h
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 6ebc247..d84d52b 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -696,7 +696,7 @@ static int iscsit_map_iovec(
u32 data_offset,
u32 data_length)
{
- u32 i;
+ u32 i = 0;
struct scatterlist *sg;
unsigned int page_off;
@@ -705,20 +705,20 @@ static int iscsit_map_iovec(
* At this point, we also know each contains a page.
*/
sg = &cmd->t_mem_sg[data_offset / PAGE_SIZE];
- page_off = (data_offset % PAGE_SIZE) + sg->offset;
+ page_off = (data_offset % PAGE_SIZE);
cmd->first_data_sg = sg;
cmd->first_data_sg_off = page_off;
- i = 0;
while (data_length) {
- u32 cur_len = min_t(u32, data_length, (sg[i].length - page_off));
+ u32 cur_len = min_t(u32, data_length, sg->length - page_off);
- iov[i].iov_base = kmap(sg_page(&sg[i]));
+ iov[i].iov_base = kmap(sg_page(sg)) + sg->offset + page_off;
iov[i].iov_len = cur_len;
data_length -= cur_len;
page_off = 0;
+ sg = sg_next(sg);
i++;
}
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/7] iscsi-target: Fix iscsit_fe_sendpage_sg breakage
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
` (4 preceding siblings ...)
2011-06-04 1:18 ` [PATCH 5/7] iscsi-target: Fix iscsit_map_iovec cur_len + data_offset breakage Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 7/7] iscsi-target: Fix iscsit_do_crypto_hash_sg() bug Nicholas A. Bellinger
6 siblings, 0 replies; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
The patch fixes iscsit_fe_sendpage_sg() to follow iscsit_map_iovec() usage of
cmd->first_data_sg_off for the iSCSI data sequence offset into the first page,
along with individual sg->offset set for SCF_SCSI_CONTROL_NONSG_IO_CDB in
iscsit_alloc_buffs().
It also fixes the padding and DataDigest iovec offsets to use the updated
cmd->iov_data_count in iscsit_allocate_iovecs().
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target_util.c | 15 +++++++--------
1 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c
index c6219e5..7eeddd2 100644
--- a/drivers/target/iscsi/iscsi_target_util.c
+++ b/drivers/target/iscsi/iscsi_target_util.c
@@ -1277,12 +1277,11 @@ int iscsit_fe_sendpage_sg(
struct iscsi_cmd *cmd,
struct iscsi_conn *conn)
{
- int tx_sent;
- u32 tx_hdr_size;
- u32 data_len;
- struct kvec iov;
struct scatterlist *sg = cmd->first_data_sg;
+ struct kvec iov;
+ u32 tx_hdr_size, data_len;
u32 offset = cmd->first_data_sg_off;
+ int tx_sent;
send_hdr:
tx_hdr_size = ISCSI_HDR_LEN;
@@ -1313,7 +1312,7 @@ send_hdr:
u32 sub_len = min_t(u32, data_len, space);
send_pg:
tx_sent = conn->sock->ops->sendpage(conn->sock,
- sg_page(sg), offset, sub_len, 0);
+ sg_page(sg), sg->offset + offset, sub_len, 0);
if (tx_sent != sub_len) {
if (tx_sent == -EAGAIN) {
printk(KERN_ERR "tcp_sendpage() returned"
@@ -1328,13 +1327,13 @@ send_pg:
data_len -= sub_len;
offset = 0;
- sg++;
+ sg = sg_next(sg);
}
send_padding:
if (cmd->padding) {
struct kvec *iov_p =
- &cmd->iov_data[cmd->iov_data_count-2];
+ &cmd->iov_data[cmd->iov_data_count-1];
tx_sent = tx_data(conn, iov_p, 1, cmd->padding);
if (cmd->padding != tx_sent) {
@@ -1349,7 +1348,7 @@ send_padding:
send_datacrc:
if (conn->conn_ops->DataDigest) {
struct kvec *iov_d =
- &cmd->iov_data[cmd->iov_data_count-1];
+ &cmd->iov_data[cmd->iov_data_count];
tx_sent = tx_data(conn, iov_d, 1, ISCSI_CRC_LEN);
if (ISCSI_CRC_LEN != tx_sent) {
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/7] iscsi-target: Fix iscsit_do_crypto_hash_sg() bug
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
` (5 preceding siblings ...)
2011-06-04 1:18 ` [PATCH 6/7] iscsi-target: Fix iscsit_fe_sendpage_sg breakage Nicholas A. Bellinger
@ 2011-06-04 1:18 ` Nicholas A. Bellinger
6 siblings, 0 replies; 11+ messages in thread
From: Nicholas A. Bellinger @ 2011-06-04 1:18 UTC (permalink / raw)
To: Andy Grover, Christoph Hellwig
Cc: target-devel, linux-scsi, Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch fixes breakage in iscsit_do_crypto_hash_sg() where
crypto_hash_update() was not referencing the current sg[] offset 'i'.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
drivers/target/iscsi/iscsi_target.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index d84d52b..fdeea0f 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1243,7 +1243,7 @@ static u32 iscsit_do_crypto_hash_sg(
while (data_length) {
u32 cur_len = min_t(u32, data_length, (sg[i].length - page_off));
- crypto_hash_update(hash, sg, cur_len);
+ crypto_hash_update(hash, &sg[i], cur_len);
data_length -= cur_len;
page_off = 0;
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 4/7] iscsi-target: Handle transport_generic_new_cmd failure
2011-06-04 1:18 ` [PATCH 4/7] iscsi-target: Handle transport_generic_new_cmd failure Nicholas A. Bellinger
@ 2011-06-04 14:00 ` Christoph Hellwig
0 siblings, 0 replies; 11+ messages in thread
From: Christoph Hellwig @ 2011-06-04 14:00 UTC (permalink / raw)
To: Nicholas A. Bellinger
Cc: Andy Grover, Christoph Hellwig, target-devel, linux-scsi
On Fri, Jun 03, 2011 at 06:18:15PM -0700, Nicholas A. Bellinger wrote:
> + ret = transport_generic_new_cmd(&cmd->se_cmd);
> + if ((ret < 0) || (SE_CMD(cmd)->se_cmd_flags & SCF_SE_CMD_FAILED)) {
No need for the inner braces. Also SCF_SE_CMD_FAILED won't ever be
set if you call transport_generic_new_cmd, so no need to check it.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page
2011-06-04 1:18 ` [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page Nicholas A. Bellinger
@ 2011-06-04 14:21 ` Christoph Hellwig
2011-06-07 21:43 ` Andy Grover
0 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2011-06-04 14:21 UTC (permalink / raw)
To: Nicholas A. Bellinger
Cc: Andy Grover, Christoph Hellwig, target-devel, linux-scsi
On Fri, Jun 03, 2011 at 06:18:12PM -0700, Nicholas A. Bellinger wrote:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> This patch changes iscsit_alloc_buffs() w/ SCF_SCSI_CONTROL_NONSG_IO_CDB
> to take into account the offset_in_page(), and also handles the case
> where length and PAGE_SIZE are identical, and require nents to be incremented.
>
> It also moves iscsit_allocate_iovecs() for the SCSI payload case until
> after transport_generic_map_mem_to_cmd() has been called because the
> iovec allocation depends upon cmd->se_cmd.t_tasks_se_num having been
> set by the return of transport_map_sg_to_mem() done in RX thread context.
I'd rather just remove the SCF_SCSI_CONTROL_NONSG_IO_CDB side of the
code path, and always allocate one page per S/G list item. That simplifies
the code, and fixes the issues with non-aligned kmallocs.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page
2011-06-04 14:21 ` Christoph Hellwig
@ 2011-06-07 21:43 ` Andy Grover
0 siblings, 0 replies; 11+ messages in thread
From: Andy Grover @ 2011-06-07 21:43 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Nicholas A. Bellinger, target-devel, linux-scsi
On 06/04/2011 07:21 AM, Christoph Hellwig wrote:
> On Fri, Jun 03, 2011 at 06:18:12PM -0700, Nicholas A. Bellinger wrote:
>> From: Nicholas Bellinger <nab@linux-iscsi.org>
>>
>> This patch changes iscsit_alloc_buffs() w/ SCF_SCSI_CONTROL_NONSG_IO_CDB
>> to take into account the offset_in_page(), and also handles the case
>> where length and PAGE_SIZE are identical, and require nents to be incremented.
>>
>> It also moves iscsit_allocate_iovecs() for the SCSI payload case until
>> after transport_generic_map_mem_to_cmd() has been called because the
>> iovec allocation depends upon cmd->se_cmd.t_tasks_se_num having been
>> set by the return of transport_map_sg_to_mem() done in RX thread context.
>
> I'd rather just remove the SCF_SCSI_CONTROL_NONSG_IO_CDB side of the
> code path, and always allocate one page per S/G list item. That simplifies
> the code, and fixes the issues with non-aligned kmallocs.
I thought about doing that but didn't quite have the guts.
It *would* simplify things a lot, though. Offsets of offsets are no fun.
+1 from me. Express everything in pages and scatterlists.
-- Andy
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2011-06-07 21:43 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-04 1:18 [PATCH 0/7] iscsi-target: Bugfixes for t_mem_list -> t_mem_sg[] conversion Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 1/7] iscsi-target: Fix iscsit_alloc_buffs() breakage with offset_in_page Nicholas A. Bellinger
2011-06-04 14:21 ` Christoph Hellwig
2011-06-07 21:43 ` Andy Grover
2011-06-04 1:18 ` [PATCH 2/7] iscsi-target: Fix padding breakage in iscsit_send_data_in Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 3/7] iscsi-target: Clear map_sg usage for non ISTATE_SEND_DATAIN ops Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 4/7] iscsi-target: Handle transport_generic_new_cmd failure Nicholas A. Bellinger
2011-06-04 14:00 ` Christoph Hellwig
2011-06-04 1:18 ` [PATCH 5/7] iscsi-target: Fix iscsit_map_iovec cur_len + data_offset breakage Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 6/7] iscsi-target: Fix iscsit_fe_sendpage_sg breakage Nicholas A. Bellinger
2011-06-04 1:18 ` [PATCH 7/7] iscsi-target: Fix iscsit_do_crypto_hash_sg() bug Nicholas A. Bellinger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox