Re: [PATCH 1/2] target: Add the DUMMY flag to rd_mcp

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/18/21 4:42 AM, Konstantin Shelekhin wrote:
> This commit adds the DUMMY flag to the rd_mcp backend that forces a
> logical unit to report itself as not connected device of an unknown
> type. Essentially this allows users to create devices identical to the
> device for the virtual LUN 0, making it possible to explicitly create a
> LUN 0 device and configure it's WWNs (e.g. vendor or product name).
> 
> Signed-off-by: Konstantin Shelekhin <k.shelekhin@xxxxxxxxx>
> Reviewed-by: Roman Bolshakov <r.bolshakov@xxxxxxxxx>
> ---
>  drivers/target/target_core_rd.c | 27 +++++++++++++++++++++++----
>  drivers/target/target_core_rd.h |  1 +
>  2 files changed, 24 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/target/target_core_rd.c b/drivers/target/target_core_rd.c
> index bf936bbeccfe..cdc5c3bc4b07 100644
> --- a/drivers/target/target_core_rd.c
> +++ b/drivers/target/target_core_rd.c
> @@ -530,12 +530,13 @@ rd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
>  }
>  
>  enum {
> -	Opt_rd_pages, Opt_rd_nullio, Opt_err
> +	Opt_rd_pages, Opt_rd_nullio, Opt_rd_dummy, Opt_err
>  };
>  
>  static match_table_t tokens = {
>  	{Opt_rd_pages, "rd_pages=%d"},
>  	{Opt_rd_nullio, "rd_nullio=%d"},
> +	{Opt_rd_dummy, "rd_dummy=%d"},
>  	{Opt_err, NULL}
>  };
>  
> @@ -574,6 +575,14 @@ static ssize_t rd_set_configfs_dev_params(struct se_device *dev,
>  			pr_debug("RAMDISK: Setting NULLIO flag: %d\n", arg);
>  			rd_dev->rd_flags |= RDF_NULLIO;
>  			break;
> +		case Opt_rd_dummy:
> +			match_int(args, &arg);
> +			if (arg != 1)
> +				break;
> +
> +			pr_debug("RAMDISK: Setting DUMMY flag: %d\n", arg);
> +			rd_dev->rd_flags |= RDF_DUMMY;
> +			break;
>  		default:
>  			break;
>  		}
> @@ -590,12 +599,22 @@ static ssize_t rd_show_configfs_dev_params(struct se_device *dev, char *b)
>  	ssize_t bl = sprintf(b, "TCM RamDisk ID: %u  RamDisk Makeup: rd_mcp\n",
>  			rd_dev->rd_dev_id);
>  	bl += sprintf(b + bl, "        PAGES/PAGE_SIZE: %u*%lu"
> -			"  SG_table_count: %u  nullio: %d\n", rd_dev->rd_page_count,
> +			"  SG_table_count: %u  nullio: %d dummy: %d\n",
> +			rd_dev->rd_page_count,
>  			PAGE_SIZE, rd_dev->sg_table_count,
> -			!!(rd_dev->rd_flags & RDF_NULLIO));
> +			!!(rd_dev->rd_flags & RDF_NULLIO),
> +			!!(rd_dev->rd_flags & RDF_DUMMY));
>  	return bl;
>  }
>  
> +static u32 rd_get_device_type(struct se_device *dev)
> +{
> +	if (RD_DEV(dev)->rd_flags & RDF_DUMMY)
> +		return 0x3f; /* Unknown device type, not connected */
> +	else
> +		return TYPE_DISK;

Maybe have this call sbc_get_device_type here so it matches the other drivers
and how this driver calls into lio core for other operations/fields like
parse_cdb or the attrs.


> +}
> +
>  static sector_t rd_get_blocks(struct se_device *dev)
>  {
>  	struct rd_dev *rd_dev = RD_DEV(dev);
> @@ -647,7 +666,7 @@ static const struct target_backend_ops rd_mcp_ops = {
>  	.parse_cdb		= rd_parse_cdb,
>  	.set_configfs_dev_params = rd_set_configfs_dev_params,
>  	.show_configfs_dev_params = rd_show_configfs_dev_params,
> -	.get_device_type	= sbc_get_device_type,
> +	.get_device_type	= rd_get_device_type,
>  	.get_blocks		= rd_get_blocks,
>  	.init_prot		= rd_init_prot,
>  	.free_prot		= rd_free_prot,
> diff --git a/drivers/target/target_core_rd.h b/drivers/target/target_core_rd.h
> index 8b88f9b14c3f..9ffda5c4b584 100644
> --- a/drivers/target/target_core_rd.h
> +++ b/drivers/target/target_core_rd.h
> @@ -28,6 +28,7 @@ struct rd_dev_sg_table {
>  
>  #define RDF_HAS_PAGE_COUNT	0x01
>  #define RDF_NULLIO		0x02
> +#define RDF_DUMMY		0x04
>  
>  struct rd_dev {
>  	struct se_device dev;
> 




[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux