From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx> This patch changes usr/scsi.c:scsi_cmd_perform() to first check to see if the struct backingstore_template->bs_passthrough=1 for SG_IO, then check for a valid struct device_type_template->cmd_passthrough() function pointer to determine if the device supports SG_IO. This patch then updates the device_type in usr/sb.c to enable the functionality for TYPE_DISK. Signed-off-by: Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx> --- usr/sbc.c | 1 + usr/scsi.c | 11 +++++++++++ usr/tgtd.h | 1 + 3 files changed, 13 insertions(+), 0 deletions(-) diff --git a/usr/sbc.c b/usr/sbc.c index a048d53..d53f7f9 100644 --- a/usr/sbc.c +++ b/usr/sbc.c @@ -269,6 +269,7 @@ static struct device_type_template sbc_template = { .lu_online = spc_lu_online, .lu_offline = spc_lu_offline, .lu_exit = spc_lu_exit, + .cmd_passthrough = sbc_rw, .ops = { {spc_test_unit,}, {spc_illegal_op,}, diff --git a/usr/scsi.c b/usr/scsi.c index cef231b..1db786e 100644 --- a/usr/scsi.c +++ b/usr/scsi.c @@ -242,6 +242,17 @@ int scsi_cmd_perform(int host_no, struct scsi_cmd *cmd) if (spc_access_check(cmd)) return SAM_STAT_RESERVATION_CONFLICT; + /* + * Use dev_type_template->cmd_passthrough() for usr/bs_sg.c devices + */ + if (cmd->dev->bst->bs_passthrough) { + if (!(cmd->dev->dev_type_template.cmd_passthrough)) { + eprintf("cmd->dev->dev_type_template.cmd_passthrough()" + " is NULL!\n"); + return SAM_STAT_CHECK_CONDITION; + } + return cmd->dev->dev_type_template.cmd_passthrough(host_no, cmd); + } return cmd->dev->dev_type_template.ops[op].cmd_perform(host_no, cmd); } diff --git a/usr/tgtd.h b/usr/tgtd.h index 4f26a29..f8ee47f 100644 --- a/usr/tgtd.h +++ b/usr/tgtd.h @@ -108,6 +108,7 @@ struct device_type_template { int (*lu_config)(struct scsi_lu *lu, char *args); int (*lu_online)(struct scsi_lu *lu); int (*lu_offline)(struct scsi_lu *lu); + int (*cmd_passthrough)(int, struct scsi_cmd *); struct device_type_operations ops[256]; -- 1.5.6.5 -- To unsubscribe from this list: send the line "unsubscribe stgt" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html