]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
scsi: target: core: Send max transfer length in blocks
authorAnastasia Kovaleva <a.kovaleva@yadro.com>
Mon, 14 Nov 2022 10:24:58 +0000 (13:24 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 24 Nov 2022 02:16:19 +0000 (02:16 +0000)
A MAXIMUM TRANSFER LENGTH value indicates the maximum transfer length in
logical blocks that the device server accepts for a single command. Fix
function sending the length in sectors instead of blocks.

This patch also removes the special casing for fileio in block_size_store
since this logic in now unified in spc_emulate_evpd_b0() for all backends.

Reviewed-by: Konstantin Shelekhin <k.shelekhin@yadro.com>
Reviewed-by: Dmitriy Bogdanov <d.bogdanov@yadro.com>
Signed-off-by: Anastasia Kovaleva <a.kovaleva@yadro.com>
Link: https://lore.kernel.org/r/20221114102500.88892-2-a.kovaleva@yadro.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_configfs.c
drivers/target/target_core_file.c
drivers/target/target_core_spc.c
include/target/target_core_base.h

index b8a5c8d6cfde0e88b74b5bd6622a1e726e8ecd6b..611b0424e305aaebf0438c47f6f596a355f49a51 100644 (file)
@@ -1102,8 +1102,6 @@ static ssize_t block_size_store(struct config_item *item,
        }
 
        da->block_size = val;
-       if (da->max_bytes_per_io)
-               da->hw_max_sectors = da->max_bytes_per_io / val;
 
        pr_debug("dev[%p]: SE Device block_size changed to %u\n",
                        da->da_dev, val);
index 28aa643be5d5e3ac1b44957044d89e25f5fc1d09..f9aed9fa8ced291b3309c18b46905ac421a4ed0a 100644 (file)
@@ -193,7 +193,6 @@ static int fd_configure_device(struct se_device *dev)
        }
 
        dev->dev_attrib.hw_block_size = fd_dev->fd_block_size;
-       dev->dev_attrib.max_bytes_per_io = FD_MAX_BYTES;
        dev->dev_attrib.hw_max_sectors = FD_MAX_BYTES / fd_dev->fd_block_size;
        dev->dev_attrib.hw_queue_depth = FD_MAX_DEVICE_QUEUE_DEPTH;
 
index 621a460ba234e5bd40733cd0d000499ad85a92dd..fcc7b10a7ae3547e1ebc3a61cc735abae94c8ba9 100644 (file)
@@ -515,6 +515,7 @@ spc_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
        struct se_device *dev = cmd->se_dev;
        u32 mtl = 0;
        int have_tp = 0, opt, min;
+       u32 io_max_blocks;
 
        /*
         * Following spc3r22 section 6.5.3 Block Limits VPD page, when
@@ -553,7 +554,10 @@ spc_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
                mtl = (cmd->se_tfo->max_data_sg_nents * PAGE_SIZE) /
                       dev->dev_attrib.block_size;
        }
-       put_unaligned_be32(min_not_zero(mtl, dev->dev_attrib.hw_max_sectors), &buf[8]);
+       io_max_blocks = mult_frac(dev->dev_attrib.hw_max_sectors,
+                       dev->dev_attrib.hw_block_size,
+                       dev->dev_attrib.block_size);
+       put_unaligned_be32(min_not_zero(mtl, io_max_blocks), &buf[8]);
 
        /*
         * Set OPTIMAL TRANSFER LENGTH
index 0c1e4398098522d2d98e4adf0381d940b4181de1..12c9ba16217ef84818d207fdb94bce89f22ceb9b 100644 (file)
@@ -712,7 +712,6 @@ struct se_dev_attrib {
        u32             unmap_granularity;
        u32             unmap_granularity_alignment;
        u32             max_write_same_len;
-       u32             max_bytes_per_io;
        struct se_device *da_dev;
        struct config_group da_group;
 };