All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <bart.vanassche@sandisk.com>
To: "Martin K . Petersen" <martin.petersen@oracle.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: <linux-scsi@vger.kernel.org>, <linux-block@vger.kernel.org>,
	"Bart Van Assche" <bart.vanassche@sandisk.com>,
	Christoph Hellwig <hch@lst.de>, "Hannes Reinecke" <hare@suse.com>,
	Johannes Thumshirn <jthumshirn@suse.de>,
	"Sreekanth Reddy" <sreekanth.reddy@broadcom.com>
Subject: [PATCH 02/31] Create two versions of scsi_internal_device_unblock()
Date: Tue, 23 May 2017 17:33:51 -0700	[thread overview]
Message-ID: <20170524003420.5381-3-bart.vanassche@sandisk.com> (raw)
In-Reply-To: <20170524003420.5381-1-bart.vanassche@sandisk.com>

This will make it easier to serialize SCSI device state changes
through a mutex.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Cc: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 ++--
 drivers/scsi/scsi_lib.c              | 46 +++++++++++++++++++++++++-----------
 include/scsi/scsi_device.h           |  4 ++--
 3 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index c63bc5ccce37..22998cbd538f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2883,7 +2883,7 @@ _scsih_internal_device_unblock(struct scsi_device *sdev,
 	sdev_printk(KERN_WARNING, sdev, "device_unblock and setting to running, "
 	    "handle(0x%04x)\n", sas_device_priv_data->sas_target->handle);
 	sas_device_priv_data->block = 0;
-	r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+	r = scsi_internal_device_unblock_nowait(sdev, SDEV_RUNNING);
 	if (r == -EINVAL) {
 		/* The device has been set to SDEV_RUNNING by SD layer during
 		 * device addition but the request queue is still stopped by
@@ -2902,7 +2902,7 @@ _scsih_internal_device_unblock(struct scsi_device *sdev,
 			    r, sas_device_priv_data->sas_target->handle);
 
 		sas_device_priv_data->block = 0;
-		r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+		r = scsi_internal_device_unblock_nowait(sdev, SDEV_RUNNING);
 		if (r)
 			sdev_printk(KERN_WARNING, sdev, "retried device_unblock"
 			    " failed with return(%d) for handle(0x%04x)\n",
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 74618f47a28e..7ed71db8c38a 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -3011,24 +3011,22 @@ static int scsi_internal_device_block(struct scsi_device *sdev)
 }
  
 /**
- * scsi_internal_device_unblock - resume a device after a block request
+ * scsi_internal_device_unblock_nowait - resume a device after a block request
  * @sdev:	device to resume
- * @new_state:	state to set devices to after unblocking
+ * @new_state:	state to set the device to after unblocking
  *
- * Called by scsi lld's or the midlayer to restart the device queue
- * for the previously suspended scsi device.  Called from interrupt or
- * normal process context.
+ * Restart the device queue for a previously suspended SCSI device. Does not
+ * sleep.
  *
- * Returns zero if successful or error if not.
+ * Returns zero if successful or a negative error code upon failure.
  *
- * Notes:       
- *	This routine transitions the device to the SDEV_RUNNING state
- *	or to one of the offline states (which must be a legal transition)
- *	allowing the midlayer to goose the queue for this device.
+ * Notes:
+ * This routine transitions the device to the SDEV_RUNNING state or to one of
+ * the offline states (which must be a legal transition) allowing the midlayer
+ * to goose the queue for this device.
  */
-int
-scsi_internal_device_unblock(struct scsi_device *sdev,
-			     enum scsi_device_state new_state)
+int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
+					enum scsi_device_state new_state)
 {
 	struct request_queue *q = sdev->request_queue; 
 	unsigned long flags;
@@ -3060,7 +3058,27 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(scsi_internal_device_unblock);
+EXPORT_SYMBOL_GPL(scsi_internal_device_unblock_nowait);
+
+/**
+ * scsi_internal_device_unblock - resume a device after a block request
+ * @sdev:	device to resume
+ * @new_state:	state to set the device to after unblocking
+ *
+ * Restart the device queue for a previously suspended SCSI device. May sleep.
+ *
+ * Returns zero if successful or a negative error code upon failure.
+ *
+ * Notes:
+ * This routine transitions the device to the SDEV_RUNNING state or to one of
+ * the offline states (which must be a legal transition) allowing the midlayer
+ * to goose the queue for this device.
+ */
+static int scsi_internal_device_unblock(struct scsi_device *sdev,
+					enum scsi_device_state new_state)
+{
+	return scsi_internal_device_unblock_nowait(sdev, new_state);
+}
 
 static void
 device_block(struct scsi_device *sdev, void *data)
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 6ce6888f3c69..5f24dae2a8e1 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -473,8 +473,8 @@ static inline int scsi_device_created(struct scsi_device *sdev)
 }
 
 int scsi_internal_device_block_nowait(struct scsi_device *sdev);
-int scsi_internal_device_unblock(struct scsi_device *sdev,
-				 enum scsi_device_state new_state);
+int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
+					enum scsi_device_state new_state);
 
 /* accessor functions for the SCSI parameters */
 static inline int scsi_device_sync(struct scsi_device *sdev)
-- 
2.12.2

WARNING: multiple messages have this Message-ID (diff)
From: Bart Van Assche <bart.vanassche@sandisk.com>
To: "Martin K . Petersen" <martin.petersen@oracle.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: linux-scsi@vger.kernel.org, linux-block@vger.kernel.org,
	Bart Van Assche <bart.vanassche@sandisk.com>,
	Christoph Hellwig <hch@lst.de>, Hannes Reinecke <hare@suse.com>,
	Johannes Thumshirn <jthumshirn@suse.de>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Subject: [PATCH 02/31] Create two versions of scsi_internal_device_unblock()
Date: Tue, 23 May 2017 17:33:51 -0700	[thread overview]
Message-ID: <20170524003420.5381-3-bart.vanassche@sandisk.com> (raw)
In-Reply-To: <20170524003420.5381-1-bart.vanassche@sandisk.com>

This will make it easier to serialize SCSI device state changes
through a mutex.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Cc: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 ++--
 drivers/scsi/scsi_lib.c              | 46 +++++++++++++++++++++++++-----------
 include/scsi/scsi_device.h           |  4 ++--
 3 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index c63bc5ccce37..22998cbd538f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2883,7 +2883,7 @@ _scsih_internal_device_unblock(struct scsi_device *sdev,
 	sdev_printk(KERN_WARNING, sdev, "device_unblock and setting to running, "
 	    "handle(0x%04x)\n", sas_device_priv_data->sas_target->handle);
 	sas_device_priv_data->block = 0;
-	r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+	r = scsi_internal_device_unblock_nowait(sdev, SDEV_RUNNING);
 	if (r == -EINVAL) {
 		/* The device has been set to SDEV_RUNNING by SD layer during
 		 * device addition but the request queue is still stopped by
@@ -2902,7 +2902,7 @@ _scsih_internal_device_unblock(struct scsi_device *sdev,
 			    r, sas_device_priv_data->sas_target->handle);
 
 		sas_device_priv_data->block = 0;
-		r = scsi_internal_device_unblock(sdev, SDEV_RUNNING);
+		r = scsi_internal_device_unblock_nowait(sdev, SDEV_RUNNING);
 		if (r)
 			sdev_printk(KERN_WARNING, sdev, "retried device_unblock"
 			    " failed with return(%d) for handle(0x%04x)\n",
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 74618f47a28e..7ed71db8c38a 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -3011,24 +3011,22 @@ static int scsi_internal_device_block(struct scsi_device *sdev)
 }
  
 /**
- * scsi_internal_device_unblock - resume a device after a block request
+ * scsi_internal_device_unblock_nowait - resume a device after a block request
  * @sdev:	device to resume
- * @new_state:	state to set devices to after unblocking
+ * @new_state:	state to set the device to after unblocking
  *
- * Called by scsi lld's or the midlayer to restart the device queue
- * for the previously suspended scsi device.  Called from interrupt or
- * normal process context.
+ * Restart the device queue for a previously suspended SCSI device. Does not
+ * sleep.
  *
- * Returns zero if successful or error if not.
+ * Returns zero if successful or a negative error code upon failure.
  *
- * Notes:       
- *	This routine transitions the device to the SDEV_RUNNING state
- *	or to one of the offline states (which must be a legal transition)
- *	allowing the midlayer to goose the queue for this device.
+ * Notes:
+ * This routine transitions the device to the SDEV_RUNNING state or to one of
+ * the offline states (which must be a legal transition) allowing the midlayer
+ * to goose the queue for this device.
  */
-int
-scsi_internal_device_unblock(struct scsi_device *sdev,
-			     enum scsi_device_state new_state)
+int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
+					enum scsi_device_state new_state)
 {
 	struct request_queue *q = sdev->request_queue; 
 	unsigned long flags;
@@ -3060,7 +3058,27 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(scsi_internal_device_unblock);
+EXPORT_SYMBOL_GPL(scsi_internal_device_unblock_nowait);
+
+/**
+ * scsi_internal_device_unblock - resume a device after a block request
+ * @sdev:	device to resume
+ * @new_state:	state to set the device to after unblocking
+ *
+ * Restart the device queue for a previously suspended SCSI device. May sleep.
+ *
+ * Returns zero if successful or a negative error code upon failure.
+ *
+ * Notes:
+ * This routine transitions the device to the SDEV_RUNNING state or to one of
+ * the offline states (which must be a legal transition) allowing the midlayer
+ * to goose the queue for this device.
+ */
+static int scsi_internal_device_unblock(struct scsi_device *sdev,
+					enum scsi_device_state new_state)
+{
+	return scsi_internal_device_unblock_nowait(sdev, new_state);
+}
 
 static void
 device_block(struct scsi_device *sdev, void *data)
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 6ce6888f3c69..5f24dae2a8e1 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -473,8 +473,8 @@ static inline int scsi_device_created(struct scsi_device *sdev)
 }
 
 int scsi_internal_device_block_nowait(struct scsi_device *sdev);
-int scsi_internal_device_unblock(struct scsi_device *sdev,
-				 enum scsi_device_state new_state);
+int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
+					enum scsi_device_state new_state);
 
 /* accessor functions for the SCSI parameters */
 static inline int scsi_device_sync(struct scsi_device *sdev)
-- 
2.12.2

  parent reply	other threads:[~2017-05-24  0:33 UTC|newest]

Thread overview: 121+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-24  0:33 [PATCH 00/31] SCSI patches for kernel v4.13 Bart Van Assche
2017-05-24  0:33 ` Bart Van Assche
2017-05-24  0:33 ` [PATCH 01/31] Split scsi_internal_device_block() Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:48   ` Hannes Reinecke
2017-05-24  7:36   ` Johannes Thumshirn
2017-05-24  0:33 ` Bart Van Assche [this message]
2017-05-24  0:33   ` [PATCH 02/31] Create two versions of scsi_internal_device_unblock() Bart Van Assche
2017-05-24  5:48   ` Hannes Reinecke
2017-05-24  7:38   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 03/31] Protect SCSI device state changes with a mutex Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:51   ` Hannes Reinecke
2017-05-24 15:10     ` Bart Van Assche
2017-05-24 15:10       ` Bart Van Assche
2017-05-24  0:33 ` [PATCH 04/31] Introduce scsi_start_queue() Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:51   ` Hannes Reinecke
2017-05-24  0:33 ` [PATCH 05/31] Make __scsi_remove_device go straight from BLOCKED to DEL Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:52   ` Hannes Reinecke
2017-05-24  0:33 ` [PATCH 06/31] scmd_eh_abort_handler(): Add a comment Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:53   ` Hannes Reinecke
2017-05-24  0:33 ` [PATCH 07/31] scsi: Use blk_mq_rq_to_pdu() to convert a request to a SCSI command pointer Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:54   ` Hannes Reinecke
2017-05-24  7:50   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 08/31] sd, sr: Convert two assignments into warning statements Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:55   ` Hannes Reinecke
2017-05-24  7:52   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 09/31] block: Avoid that blk_exit_rl() triggers a use-after-free Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:55   ` Hannes Reinecke
2017-05-24 15:09   ` Tejun Heo
2017-05-24  0:33 ` [PATCH 10/31] Avoid that scsi_exit_rq() " Bart Van Assche
2017-05-24  0:33   ` Bart Van Assche
2017-05-24  5:58   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 11/31] block: Introduce queue flag QUEUE_FLAG_SCSI_SUP Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:01   ` Hannes Reinecke
2017-05-24 15:05     ` Bart Van Assche
2017-05-24 15:05       ` Bart Van Assche
2017-05-24  0:34 ` [PATCH 12/31] bsg: Check queue type before attaching to a queue Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:01   ` Hannes Reinecke
2017-05-25  2:01   ` Martin K. Petersen
2017-05-25  2:01     ` Martin K. Petersen
2017-05-24  0:34 ` [PATCH 13/31] pktcdvd: " Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:02   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 14/31] cdrom: Check private request size " Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:02   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 15/31] nfsd: Check private request size before submitting a SCSI request Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:02   ` Hannes Reinecke
2017-05-24  6:02     ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 16/31] scsi: Make scsi_ioctl_reset() pass the request queue pointer to blk_rq_init() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:03   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 17/31] block: Introduce request_queue.initialize_rq_fn() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:04   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 18/31] block: Make scsi_req_init() calls implicit Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:05   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 19/31] scsi: Change argument type of scsi_req_init() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:06   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 20/31] scsi: Only add commands to the device command list if required by the LLD Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:07   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 21/31] scsi: Move most of scsi_init_command() into scsi_initialize_rq() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:09   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 22/31] scsi: Inline scsi_init_command() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:09   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 23/31] scsi: Move sense buffer pointer initialization into scsi_initialize_rq() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:10   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 24/31] scsi: Make scsi_initialize_rq() zero the entire struct scsi_cmnd Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:10   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 25/31] scsi-mq: Make behavior scsi_mq_prep_fn() closer to that of scsi_prep_fn() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:11   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 26/31] scsi: Move the code for clearing private command data into scsi_dispatch_cmd() Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:12   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 27/31] scsi: Consolidate more initialization code Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:13   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 28/31] scsi_setup_fs_cmnd(): Call scsi_req_init() instead of open-coding it Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:13   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 29/31] scsi: snic: Remove code that zeroes driver-private command data Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 30/31] scsi: virtio: " Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 31/31] xen/scsifront: " Bart Van Assche
2017-05-24  0:34   ` Bart Van Assche
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  7:02   ` Juergen Gross
2017-05-24  7:02   ` Juergen Gross
2017-05-24  0:34 ` Bart Van Assche
2017-05-24  2:31 ` [PATCH 00/31] SCSI patches for kernel v4.13 Martin K. Petersen
2017-05-24  2:31   ` Martin K. Petersen
2017-05-24  3:55 ` Jens Axboe
2017-05-24  4:43   ` Bart Van Assche
2017-05-24  4:43     ` Bart Van Assche
2017-05-25  2:04 ` Martin K. Petersen
2017-05-25  2:04   ` Martin K. Petersen
2017-06-01 14:08   ` Bart Van Assche
2017-06-01 14:08     ` Bart Van Assche
2017-06-01 14:09     ` Christoph Hellwig

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=20170524003420.5381-3-bart.vanassche@sandisk.com \
    --to=bart.vanassche@sandisk.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=hare@suse.com \
    --cc=hch@lst.de \
    --cc=jthumshirn@suse.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=sreekanth.reddy@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.