From: Ming Lei <ming.lei@redhat.com>
To: Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org,
"Martin K . Petersen" <martin.petersen@oracle.com>,
linux-scsi@vger.kernel.org
Cc: Ming Lei <ming.lei@redhat.com>, Omar Sandoval <osandov@fb.com>,
Kashyap Desai <kashyap.desai@broadcom.com>,
Sumanesh Samanta <sumanesh.samanta@broadcom.com>,
"Ewan D . Milne" <emilne@redhat.com>,
Hannes Reinecke <hare@suse.de>
Subject: [PATCH V5 07/13] blk-mq: add callbacks for storing & retrieving budget token
Date: Thu, 19 Nov 2020 17:46:59 +0800 [thread overview]
Message-ID: <20201119094705.280390-8-ming.lei@redhat.com> (raw)
In-Reply-To: <20201119094705.280390-1-ming.lei@redhat.com>
SCSI is the only driver which requires dispatch budget, and it isn't
fair to add one field into 'struct request' for storing budget token
which will be used in the following patches for improving scsi's device
busy scalability.
Cc: Omar Sandoval <osandov@fb.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: Sumanesh Samanta <sumanesh.samanta@broadcom.com>
Cc: Ewan D. Milne <emilne@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Tested-by: Sumanesh Samanta <sumanesh.samanta@broadcom.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
drivers/scsi/scsi_lib.c | 18 ++++++++++++++++++
include/linux/blk-mq.h | 9 +++++++++
include/scsi/scsi_cmnd.h | 2 ++
3 files changed, 29 insertions(+)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 60c7a7d74852..022ed2991463 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1635,6 +1635,20 @@ static bool scsi_mq_get_budget(struct request_queue *q)
return false;
}
+static void scsi_mq_set_rq_budget_token(struct request *req, int token)
+{
+ struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
+
+ cmd->budget_token = token;
+}
+
+static int scsi_mq_get_rq_budget_token(struct request *req)
+{
+ struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
+
+ return cmd->budget_token;
+}
+
static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx,
const struct blk_mq_queue_data *bd)
{
@@ -1845,6 +1859,8 @@ static const struct blk_mq_ops scsi_mq_ops_no_commit = {
.cleanup_rq = scsi_cleanup_rq,
.busy = scsi_mq_lld_busy,
.map_queues = scsi_map_queues,
+ .set_rq_budget_token = scsi_mq_set_rq_budget_token,
+ .get_rq_budget_token = scsi_mq_get_rq_budget_token,
};
@@ -1873,6 +1889,8 @@ static const struct blk_mq_ops scsi_mq_ops = {
.cleanup_rq = scsi_cleanup_rq,
.busy = scsi_mq_lld_busy,
.map_queues = scsi_map_queues,
+ .set_rq_budget_token = scsi_mq_set_rq_budget_token,
+ .get_rq_budget_token = scsi_mq_get_rq_budget_token,
};
struct request_queue *scsi_mq_alloc_queue(struct scsi_device *sdev)
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 794b2a33a2c3..d2c66b453d07 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -316,6 +316,15 @@ struct blk_mq_ops {
*/
void (*put_budget)(struct request_queue *);
+ /*
+ * @set_rq_budget_toekn: store rq's budget token
+ */
+ void (*set_rq_budget_token)(struct request *, int);
+ /*
+ * @get_rq_budget_toekn: retrieve rq's budget token
+ */
+ int (*get_rq_budget_token)(struct request *);
+
/**
* @timeout: Called on request timeout.
*/
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index 69ade4fb71aa..4884f300c896 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -75,6 +75,8 @@ struct scsi_cmnd {
int eh_eflags; /* Used by error handlr */
+ int budget_token;
+
/*
* This is set to jiffies as it was when the command was first
* allocated. It is used to time how long the command has
--
2.25.4
next prev parent reply other threads:[~2020-11-19 9:48 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-19 9:46 [PATCH V5 00/13] blk-mq/scsi: tracking device queue depth via sbitmap Ming Lei
2020-11-19 9:46 ` [PATCH V5 01/13] sbitmap: remove sbitmap_clear_bit_unlock Ming Lei
2020-11-19 9:46 ` [PATCH V5 02/13] sbitmap: maintain allocation round_robin in sbitmap Ming Lei
2020-11-19 9:46 ` [PATCH V5 03/13] sbitmap: add helpers for updating allocation hint Ming Lei
2020-11-19 9:46 ` [PATCH V5 04/13] sbitmap: move allocation hint into sbitmap Ming Lei
2020-11-19 9:46 ` [PATCH V5 05/13] sbitmap: export sbitmap_weight Ming Lei
2020-11-19 9:46 ` [PATCH V5 06/13] sbitmap: add helper of sbitmap_calculate_shift Ming Lei
2020-11-19 9:46 ` Ming Lei [this message]
2020-11-19 9:47 ` [PATCH V5 08/13] blk-mq: return budget token from .get_budget callback Ming Lei
2020-11-19 9:47 ` [PATCH V5 09/13] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
2020-11-19 9:51 ` [PATCH V5 10/13] megaraid_sas: v2 replace sdev_busy with local Ming Lei
2020-11-19 10:29 ` Hannes Reinecke
2020-11-20 1:35 ` [PATCH V6 10/13] megaraid_sas: v2 replace sdev_busy with local counter Ming Lei
2020-11-19 9:53 ` [PATCH V5 11/13] scsi: add scsi_device_busy() to read sdev->device_busy Ming Lei
2020-11-19 9:54 ` [PATCH V5 12/13] scsi: make sure sdev->queue_depth is <= max(shost->can_queue, 1024) Ming Lei
2020-11-19 9:55 ` [PATCH V5 13/13] scsi: replace sdev->device_busy with sbitmap Ming Lei
-- strict thread matches above, loose matches on Subject: below --
2020-11-19 9:33 [PATCH V5 00/13] blk-mq/scsi: tracking device queue depth via sbitmap Ming Lei
2020-11-19 9:33 ` [PATCH V5 07/13] blk-mq: add callbacks for storing & retrieving budget token Ming Lei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201119094705.280390-8-ming.lei@redhat.com \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=emilne@redhat.com \
--cc=hare@suse.de \
--cc=kashyap.desai@broadcom.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=osandov@fb.com \
--cc=sumanesh.samanta@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).