scsi: bsg: Pass queue_limits to bsg_setup_queue()
authorChristoph Hellwig <hch@lst.de>
Tue, 9 Apr 2024 14:37:27 +0000 (16:37 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 12 Apr 2024 01:37:48 +0000 (21:37 -0400)
This allows bsg_setup_queue() to pass them to blk_mq_alloc_queue() and thus
set up the limits at queue allocation time.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240409143748.980206-3-hch@lst.de
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
block/bsg-lib.c
drivers/scsi/mpi3mr/mpi3mr_app.c
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_iscsi.c
drivers/scsi/scsi_transport_sas.c
drivers/ufs/core/ufs_bsg.c
include/linux/bsg-lib.h

index bcc7dee6abced61e33c55950774cfac418375b09..ee738d129a9f5e18ec43fe24ff02cdfbb89c01df 100644 (file)
@@ -354,12 +354,14 @@ static const struct blk_mq_ops bsg_mq_ops = {
  * bsg_setup_queue - Create and add the bsg hooks so we can receive requests
  * @dev: device to attach bsg device to
  * @name: device to give bsg device
+ * @lim: queue limits for the bsg queue
  * @job_fn: bsg job handler
  * @timeout: timeout handler function pointer
  * @dd_job_size: size of LLD data needed for each job
  */
 struct request_queue *bsg_setup_queue(struct device *dev, const char *name,
-               bsg_job_fn *job_fn, bsg_timeout_fn *timeout, int dd_job_size)
+               struct queue_limits *lim, bsg_job_fn *job_fn,
+               bsg_timeout_fn *timeout, int dd_job_size)
 {
        struct bsg_set *bset;
        struct blk_mq_tag_set *set;
@@ -383,7 +385,7 @@ struct request_queue *bsg_setup_queue(struct device *dev, const char *name,
        if (blk_mq_alloc_tag_set(set))
                goto out_tag_set;
 
-       q = blk_mq_alloc_queue(set, NULL, NULL);
+       q = blk_mq_alloc_queue(set, lim, NULL);
        if (IS_ERR(q)) {
                ret = PTR_ERR(q);
                goto out_queue;
index 38f63bc7ef3bf12d61a792e845eaba52071e75a4..a45406fae2629b0e15e28a3c31dada025873e157 100644 (file)
@@ -1860,7 +1860,7 @@ void mpi3mr_bsg_init(struct mpi3mr_ioc *mrioc)
                return;
        }
 
-       mrioc->bsg_queue = bsg_setup_queue(bsg_dev, dev_name(bsg_dev),
+       mrioc->bsg_queue = bsg_setup_queue(bsg_dev, dev_name(bsg_dev), NULL,
                        mpi3mr_bsg_request, NULL, 0);
        if (IS_ERR(mrioc->bsg_queue)) {
                ioc_err(mrioc, "%s: bsg registration failed\n",
index b04075f19445dc97c4ec98baaadf1184d004cd18..87b2235b8ece45b9364d0f945a1024bda95a8fcb 100644 (file)
@@ -4287,8 +4287,8 @@ fc_bsg_hostadd(struct Scsi_Host *shost, struct fc_host_attrs *fc_host)
        snprintf(bsg_name, sizeof(bsg_name),
                 "fc_host%d", shost->host_no);
 
-       q = bsg_setup_queue(dev, bsg_name, fc_bsg_dispatch, fc_bsg_job_timeout,
-                               i->f->dd_bsg_size);
+       q = bsg_setup_queue(dev, bsg_name, NULL, fc_bsg_dispatch,
+                       fc_bsg_job_timeout, i->f->dd_bsg_size);
        if (IS_ERR(q)) {
                dev_err(dev,
                        "fc_host%d: bsg interface failed to initialize - setup queue\n",
@@ -4318,7 +4318,7 @@ fc_bsg_rportadd(struct Scsi_Host *shost, struct fc_rport *rport)
        if (!i->f->bsg_request)
                return -ENOTSUPP;
 
-       q = bsg_setup_queue(dev, dev_name(dev), fc_bsg_dispatch_prep,
+       q = bsg_setup_queue(dev, dev_name(dev), NULL, fc_bsg_dispatch_prep,
                                fc_bsg_job_timeout, i->f->dd_bsg_size);
        if (IS_ERR(q)) {
                dev_err(dev, "failed to setup bsg queue\n");
index af3ac6346796ba624820086c7a5293fdcc2cba73..c131746bf207777d78e85e89f48c55e6f9321b6d 100644 (file)
@@ -1542,7 +1542,8 @@ iscsi_bsg_host_add(struct Scsi_Host *shost, struct iscsi_cls_host *ihost)
                return -ENOTSUPP;
 
        snprintf(bsg_name, sizeof(bsg_name), "iscsi_host%d", shost->host_no);
-       q = bsg_setup_queue(dev, bsg_name, iscsi_bsg_host_dispatch, NULL, 0);
+       q = bsg_setup_queue(dev, bsg_name, NULL, iscsi_bsg_host_dispatch, NULL,
+                       0);
        if (IS_ERR(q)) {
                shost_printk(KERN_ERR, shost, "bsg interface failed to "
                             "initialize - no request queue\n");
index d704c484a251c5d3ebf112a4b9b68e32a3822d4a..424a89513814b4904f31a2dd67c02bdbd64479e7 100644 (file)
@@ -197,7 +197,7 @@ static int sas_bsg_initialize(struct Scsi_Host *shost, struct sas_rphy *rphy)
        }
 
        if (rphy) {
-               q = bsg_setup_queue(&rphy->dev, dev_name(&rphy->dev),
+               q = bsg_setup_queue(&rphy->dev, dev_name(&rphy->dev), NULL,
                                sas_smp_dispatch, NULL, 0);
                if (IS_ERR(q))
                        return PTR_ERR(q);
@@ -206,7 +206,7 @@ static int sas_bsg_initialize(struct Scsi_Host *shost, struct sas_rphy *rphy)
                char name[20];
 
                snprintf(name, sizeof(name), "sas_host%d", shost->host_no);
-               q = bsg_setup_queue(&shost->shost_gendev, name,
+               q = bsg_setup_queue(&shost->shost_gendev, name, NULL,
                                sas_smp_dispatch, NULL, 0);
                if (IS_ERR(q))
                        return PTR_ERR(q);
index 374e5aae4e7e86b0b80b75defa85dfea2e60fedd..433d0480391ea633c005aee741b1bd89b1e44db9 100644 (file)
@@ -253,7 +253,8 @@ int ufs_bsg_probe(struct ufs_hba *hba)
        if (ret)
                goto out;
 
-       q = bsg_setup_queue(bsg_dev, dev_name(bsg_dev), ufs_bsg_request, NULL, 0);
+       q = bsg_setup_queue(bsg_dev, dev_name(bsg_dev), NULL, ufs_bsg_request,
+                       NULL, 0);
        if (IS_ERR(q)) {
                ret = PTR_ERR(q);
                goto out;
index 9e97ced2896df25df788bf3939e60dedb6e790e7..14fa93268630ede7107968907a6026c19ae416ac 100644 (file)
@@ -65,7 +65,8 @@ struct bsg_job {
 void bsg_job_done(struct bsg_job *job, int result,
                  unsigned int reply_payload_rcv_len);
 struct request_queue *bsg_setup_queue(struct device *dev, const char *name,
-               bsg_job_fn *job_fn, bsg_timeout_fn *timeout, int dd_job_size);
+               struct queue_limits *lim, bsg_job_fn *job_fn,
+               bsg_timeout_fn *timeout, int dd_job_size);
 void bsg_remove_queue(struct request_queue *q);
 void bsg_job_put(struct bsg_job *job);
 int __must_check bsg_job_get(struct bsg_job *job);