[stgt] [PATCH] tgt: Add BSG v4 backstore support to usr/bs_sg.c
FUJITA Tomonori
fujita.tomonori at lab.ntt.co.jp
Sun Jun 20 04:16:02 CEST 2010
On Wed, 16 Jun 2010 22:42:08 -0700
"Nicholas A. Bellinger" <nab at linux-iscsi.org> wrote:
> From: Nicholas Bellinger <nab at linux-iscsi.org>
>
> This patch adds support for the block layer implementation of the sg v4 interface
> (BSG) -> STGT with a new struct backingstore_template bsg_bst sharing code with the
> original sg_bst. It adds for new function bs_bsg_cmd_submit() for incoming write I/O
> and bs_bsg_cmd_complete() for polling read I/O using include/linux/bsg.h:struct sg_io_v4.
>
> This patch adds BSG specific major checks in bs_sg_open() and for getting max_queue using
> SG_GET_COMMAND_Q and calling SG_SET_RESERVED_SIZE following init_sg_device().
>
> So far this has been tested with STGT/iSCSI <-> BSG <-> TCM_Loop SPC-4 iSCSI Target
> Port emulation and is able to mkfs, fsck and mount a filesystem from a TCM/IBLOCK
> Linux LVM kernel level backstore. This code has also been tested with SG_IO and the
> legacy codepath.
>
> Signed-off-by: Nicholas A. Bellinger <nab at linux-iscsi.org>
> ---
> usr/bs_sg.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++---
> usr/scsi_cmnd.h | 3 +
> 2 files changed, 155 insertions(+), 9 deletions(-)
>
> diff --git a/usr/bs_sg.c b/usr/bs_sg.c
> index bb03d46..e8e3551 100644
> --- a/usr/bs_sg.c
> +++ b/usr/bs_sg.c
> @@ -3,6 +3,9 @@
> *
> * Copyright (C) 2008 Alexander Nezhinsky <nezhinsky at gmail.com>
> *
> + * Added linux/block/bsg.c support using struct sg_io_v4.
> + * Copyright (C) 2010 Nicholas A. Bellinger <nab at linux-iscsi.org>
> + *
> * This program is free software; you can redistribute it and/or
> * modify it under the terms of the GNU General Public License as
> * published by the Free Software Foundation, version 2 of the
> @@ -33,6 +36,7 @@
> #include <sys/stat.h>
> #include <sys/epoll.h>
> #include <scsi/sg.h>
> +#include <linux/bsg.h>
This breaks distributions that don't have linux/bsg.h. At least, I
care about RHEL5 so please copy linux/bsg.h into tgt's tree instead of
using linux/bsg.h.
> #include "list.h"
> #include "util.h"
> @@ -45,6 +49,14 @@
> #define BS_SG_TIMEOUT 2000
> #define BS_SG_SHIFT 9
>
> +//#define BSG_DEBUG_IO
> +
> +#ifdef BSG_DEBUG_IO
> +#define BSG_IO(x...) eprintf(x)
> +#else
> +#define BSG_IO(x...)
> +#endif
> +
Hmm, can we avoid it? We can enable/disable the debugging option on
the fly.
> static int graceful_read(int fd, void *p_read, int to_read)
> {
> int err;
> @@ -107,7 +119,7 @@ static int bs_sg_rw(int host_no, struct scsi_cmd *cmd)
> return SAM_STAT_CHECK_CONDITION;
> }
>
> -static void set_cmd_failed(struct scsi_cmd *cmd)
> +static int set_cmd_failed(struct scsi_cmd *cmd)
> {
> int result = SAM_STAT_CHECK_CONDITION;
> uint16_t asc = ASC_READ_ERROR;
> @@ -115,6 +127,52 @@ static void set_cmd_failed(struct scsi_cmd *cmd)
>
> scsi_set_result(cmd, result);
> sense_data_build(cmd, key, asc);
> +
> + return result;
> +}
> +
> +static int bs_bsg_cmd_submit(struct scsi_cmd *cmd)
> +{
> + struct scsi_lu *dev = cmd->dev;
> + int fd = dev->fd;
> + struct sg_io_v4 *io_hdr = &cmd->cmd_bsg_hdr;
Hmm, why do we need to add struct sg_io_v4 to scsi_cmd? Can't we do
like bs_sg_cmd_submit?
I really like to avoid to fatten struct scsi_cmd.
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list