From: Ming Lei <ming.lei@redhat.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>,
linux-scsi@vger.kernel.org,
"Martin K . Petersen" <martin.petersen@oracle.com>
Cc: linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Ming Lei <ming.lei@redhat.com>,
Sathya Prakash <sathya.prakash@broadcom.com>,
Chaitra P B <chaitra.basappa@broadcom.com>,
Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
Kashyap Desai <kashyap.desai@broadcom.com>,
Sumit Saxena <sumit.saxena@broadcom.com>,
Shivasharan S <shivasharan.srikanteshwara@broadcom.com>,
"Ewan D . Milne" <emilne@redhat.com>,
Hannes Reinecke <hare@suse.de>,
Bart Van Assche <bart.vanassche@wdc.com>
Subject: [PATCH 1/6] scsi: mpt3sas: don't use .device_busy in device reset routine
Date: Sun, 19 Jan 2020 15:14:27 +0800 [thread overview]
Message-ID: <20200119071432.18558-2-ming.lei@redhat.com> (raw)
In-Reply-To: <20200119071432.18558-1-ming.lei@redhat.com>
scsih_dev_reset() uses scsi_device->device_busy to check if there is
inflight commands aimed to this LUN.
Uses block layer's helper of blk_mq_tagset_busy_iter() to do that, so
we can prepare for bypassing .device_busy for SSD since it is quite
expensive to inc/dec the global atomic counter in IO path.
With this change, no driver uses scsi_device->device_busy any more.
Cc: Sathya Prakash <sathya.prakash@broadcom.com>
Cc: Chaitra P B <chaitra.basappa@broadcom.com>
Cc: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: Sumit Saxena <sumit.saxena@broadcom.com>
Cc: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
Cc: Ewan D. Milne <emilne@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 32 +++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index c597d544eb39..91766c172d8f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2994,6 +2994,36 @@ scsih_abort(struct scsi_cmnd *scmd)
return r;
}
+struct device_busy {
+ struct scsi_device *dev;
+ unsigned int cnt;
+};
+
+static bool scsi_device_check_in_flight(struct request *rq, void *data,
+ bool reserved)
+{
+ struct device_busy *busy = data;
+ struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
+
+ if (test_bit(SCMD_STATE_INFLIGHT, &cmd->state) && cmd->device ==
+ busy->dev)
+ (busy->cnt)++;
+
+ return true;
+}
+
+static bool scsih_dev_busy(struct scsi_device *device)
+{
+ struct device_busy data = {
+ .dev = device,
+ .cnt = 0,
+ };
+
+ blk_mq_tagset_busy_iter(&device->host->tag_set,
+ scsi_device_check_in_flight, &data);
+ return data.cnt > 0;
+}
+
/**
* scsih_dev_reset - eh threads main device reset routine
* @scmd: pointer to scsi command object
@@ -3060,7 +3090,7 @@ scsih_dev_reset(struct scsi_cmnd *scmd)
MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET, 0, 0,
tr_timeout, tr_method);
/* Check for busy commands after reset */
- if (r == SUCCESS && atomic_read(&scmd->device->device_busy))
+ if (r == SUCCESS && scsih_dev_busy(scmd->device))
r = FAILED;
out:
sdev_printk(KERN_INFO, scmd->device, "device reset: %s scmd(0x%p)\n",
--
2.20.1
next prev parent reply other threads:[~2020-01-19 7:15 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-19 7:14 [PATCH 0/6] scsi: support bypass device busy check for some high end HBA with SSD Ming Lei
2020-01-19 7:14 ` Ming Lei [this message]
2020-01-19 20:28 ` [PATCH 1/6] scsi: mpt3sas: don't use .device_busy in device reset routine Bart Van Assche
2020-01-19 7:14 ` [PATCH 2/6] scsi: remove .for_blk_mq Ming Lei
2020-01-19 20:29 ` Bart Van Assche
2020-01-20 10:17 ` John Garry
2020-01-20 22:12 ` Elliott, Robert (Servers)
2020-01-31 6:30 ` Christoph Hellwig
2020-02-05 2:13 ` Martin K. Petersen
2020-01-19 7:14 ` [PATCH 3/6] scsi: sd: register request queue after sd_revalidate_disk is done Ming Lei
2020-01-19 20:36 ` Bart Van Assche
2020-01-19 7:14 ` [PATCH 4/6] block: freeze queue for updating QUEUE_FLAG_NONROT Ming Lei
2020-01-19 20:40 ` Bart Van Assche
2020-01-19 7:14 ` [PATCH 5/6] scsi: core: don't limit per-LUN queue depth for SSD when HBA needs Ming Lei
2020-01-19 20:58 ` Bart Van Assche
2020-01-21 4:52 ` Martin K. Petersen
2020-01-23 2:54 ` Ming Lei
2020-01-24 1:21 ` Martin K. Petersen
2020-01-24 1:59 ` Ming Lei
2020-01-24 12:43 ` Sumit Saxena
2020-01-28 4:04 ` Martin K. Petersen
2020-01-24 0:01 ` Sumanesh Samanta
2020-01-24 1:58 ` Martin K. Petersen
2020-01-24 19:41 ` Sumanesh Samanta
2020-01-28 4:22 ` Martin K. Petersen
2020-01-31 11:39 ` Ming Lei
2020-01-19 7:14 ` [PATCH 6/6] scsi: megaraid: set flag of no_device_queue_for_ssd 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=20200119071432.18558-2-ming.lei@redhat.com \
--to=ming.lei@redhat.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=axboe@kernel.dk \
--cc=bart.vanassche@wdc.com \
--cc=chaitra.basappa@broadcom.com \
--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=sathya.prakash@broadcom.com \
--cc=shivasharan.srikanteshwara@broadcom.com \
--cc=suganath-prabu.subramani@broadcom.com \
--cc=sumit.saxena@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