[Stgt-devel] iscsi target works, minor fixes

Pete Wyckoff pw
Fri Nov 3 01:45:48 CET 2006


I've been playing with the user-space iscsi target, looking at the
latest stgt SVN and linux-2.6-target git today.  One little fix I
need in the userspace code is this:

Index: trunk/usr/bd_aio.c
===================================================================
--- trunk/usr/bd_aio.c	(revision 609)
+++ trunk/usr/bd_aio.c	(working copy)
@@ -74,8 +74,8 @@ static void aio_event_handler(int fd, in
 
 	for (i = 0; i < nr; i++) {
 		iocb = bai->events[i].obj;
-		dprintf("%p\n", iocb->data);
-		target_cmd_io_done(iocb->data, 0);
+		dprintf("%p\n", bai->events[i].data);
+		target_cmd_io_done(bai->events[i].data, 0);
 	}
 }
 
While I don't understand exactly what's going on, this data pointer
from struct io_event is the correct struct cmd *, and without the
patch, tgtd segfaults trying to access fields in the (bogus) cmd
from iocb->data.

It could be related to the aiopoll-2.6.18-rc4.patch; perhaps that
was the wrong one to apply?  There was one minor reject that was
easy to fix up.  My kernel is v2.6.19-rc4 + the 9 patches in tomo's
linux-2.6-target.git + aiopoll + other minor patches.

You may want this, but it doesn't change any behavior:

diff --git a/drivers/scsi/scsi_tgt_lib.c b/drivers/scsi/scsi_tgt_lib.c
index e01f458..6e92b97 100644
--- a/drivers/scsi/scsi_tgt_lib.c
+++ b/drivers/scsi/scsi_tgt_lib.c
@@ -108,7 +108,6 @@ struct scsi_cmnd *scsi_host_get_command(
 
 	rq->special = cmd;
 	rq->cmd_type = REQ_TYPE_SPECIAL;
-	rq->cmd_flags |= REQ_TYPE_BLOCK_PC;
 	rq->end_io_data = tcmd;
 
 	bio_list_init(&tcmd->xfer_list);


What goes in cmd_flags are bit fields like REQ_SOFTBARRIER.  You're
not supposed to try to put another REQ_TYPE in there.  You do want
SPECIAL, not BLOCK_PC, since you are allocating your own struct
scsi_cmnd and putting it into rq->special.

Basic mkfs and dd seem to work just fine.  Thanks for the code.

		-- Pete



More information about the stgt mailing list