Re: [PATCH 17/23] usb-storage: switch to using ->device_configure

2024-03-25 Thread Damien Le Moal
On 3/25/24 08:54, Christoph Hellwig wrote:
> Switch to the ->device_configure method instead of ->slave_configure
> and update the block limits on the passed in queue_limits instead
> of using the per-limit accessors.
> 
> Also use the proper atomic queue limit update helpers and freeze the
> queue when updating max_hw_sectors from sysfs.
> 
> Signed-off-by: Christoph Hellwig 

Looks OK to me.

Reviewed-by: Damien Le Moal 

-- 
Damien Le Moal
Western Digital Research

-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/open-iscsi/9f2082fd-83d8-4140-84a2-865112090a46%40kernel.org.


[PATCH 17/23] usb-storage: switch to using ->device_configure

2024-03-24 Thread Christoph Hellwig
Switch to the ->device_configure method instead of ->slave_configure
and update the block limits on the passed in queue_limits instead
of using the per-limit accessors.

Also use the proper atomic queue limit update helpers and freeze the
queue when updating max_hw_sectors from sysfs.

Signed-off-by: Christoph Hellwig 
---
 drivers/usb/storage/scsiglue.c | 36 --
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index eb4ba03e082d89..b31464740f6c86 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -82,7 +82,7 @@ static int slave_alloc (struct scsi_device *sdev)
return 0;
 }
 
-static int slave_configure(struct scsi_device *sdev)
+static int device_configure(struct scsi_device *sdev, struct queue_limits *lim)
 {
struct us_data *us = host_to_us(sdev->host);
struct device *dev = us->pusb_dev->bus->sysdev;
@@ -97,31 +97,28 @@ static int slave_configure(struct scsi_device *sdev)
 
if (us->fflags & US_FL_MAX_SECTORS_MIN)
max_sectors = PAGE_SIZE >> 9;
-   if (queue_max_hw_sectors(sdev->request_queue) > max_sectors)
-   blk_queue_max_hw_sectors(sdev->request_queue,
- max_sectors);
+   lim->max_hw_sectors = min(lim->max_hw_sectors, max_sectors);
} else if (sdev->type == TYPE_TAPE) {
/*
 * Tapes need much higher max_sector limits, so just
 * raise it to the maximum possible (4 GB / 512) and
 * let the queue segment size sort out the real limit.
 */
-   blk_queue_max_hw_sectors(sdev->request_queue, 0x7F);
+   lim->max_hw_sectors = 0x7F;
} else if (us->pusb_dev->speed >= USB_SPEED_SUPER) {
/*
 * USB3 devices will be limited to 2048 sectors. This gives us
 * better throughput on most devices.
 */
-   blk_queue_max_hw_sectors(sdev->request_queue, 2048);
+   lim->max_hw_sectors = 2048;
}
 
/*
 * The max_hw_sectors should be up to maximum size of a mapping for
 * the device. Otherwise, a DMA API might fail on swiotlb environment.
 */
-   blk_queue_max_hw_sectors(sdev->request_queue,
-   min_t(size_t, queue_max_hw_sectors(sdev->request_queue),
- dma_max_mapping_size(dev) >> SECTOR_SHIFT));
+   lim->max_hw_sectors = min_t(size_t,
+   lim->max_hw_sectors, dma_max_mapping_size(dev) >> SECTOR_SHIFT);
 
/*
 * We can't put these settings in slave_alloc() because that gets
@@ -582,13 +579,22 @@ static ssize_t max_sectors_store(struct device *dev, 
struct device_attribute *at
size_t count)
 {
struct scsi_device *sdev = to_scsi_device(dev);
+   struct queue_limits lim;
unsigned short ms;
+   int ret;
 
-   if (sscanf(buf, "%hu", ) > 0) {
-   blk_queue_max_hw_sectors(sdev->request_queue, ms);
-   return count;
-   }
-   return -EINVAL;
+   if (sscanf(buf, "%hu", ) <= 0)
+   return -EINVAL;
+
+   blk_mq_freeze_queue(sdev->request_queue);
+   lim = queue_limits_start_update(sdev->request_queue);
+   lim.max_hw_sectors = ms;
+   ret = queue_limits_commit_update(sdev->request_queue, );
+   blk_mq_unfreeze_queue(sdev->request_queue);
+
+   if (ret)
+   return ret;
+   return count;
 }
 static DEVICE_ATTR_RW(max_sectors);
 
@@ -626,7 +632,7 @@ static const struct scsi_host_template 
usb_stor_host_template = {
.this_id =  -1,
 
.slave_alloc =  slave_alloc,
-   .slave_configure =  slave_configure,
+   .device_configure = device_configure,
.target_alloc = target_alloc,
 
/* lots of sg segments can be handled */
-- 
2.39.2

-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/open-iscsi/20240324235448.2039074-18-hch%40lst.de.