* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.