scsi: bsg: Pass queue_limits to bsg_setup_queue()
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>
This commit is contained in:
parent
293066264f
commit
4373d2ecca
|
@ -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;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue