public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] add back single_lun support
@ 2003-02-05 22:51 Patrick Mansfield
  2003-02-05 23:14 ` James Bottomley
  0 siblings, 1 reply; 4+ messages in thread
From: Patrick Mansfield @ 2003-02-05 22:51 UTC (permalink / raw)
  To: linux-scsi, James Bottomley

This patch against the current scsi-misc-2.5 adds back the check for the
single_lun case.

I compiled and booted with this applied but don't have any devices (i.e.
CD ROM changer) for testing.

--- 1.66/drivers/scsi/scsi_lib.c	Wed Feb  5 08:33:15 2003
+++ edited/drivers/scsi/scsi_lib.c	Tue Feb 11 14:27:08 2003
@@ -787,6 +787,22 @@
 	return ret;
 }
 
+/*
+ * The target associated with myself can only handle one active command at
+ * a time. Scan through all of the luns on the same target as myself,
+ * return 1 if any are active.
+ */
+static int check_all_luns(struct scsi_device *myself)
+{
+	struct scsi_device *sdev;
+
+	list_for_each_entry(sdev, &myself->same_target_siblings,
+			    same_target_siblings)
+		if (atomic_read(&sdev->device_active))
+			return 1;
+	return 0;
+}
+
 int scsi_prep_fn(struct request_queue *q, struct request *req)
 {
 	struct Scsi_Device_Template *STpnt;
@@ -948,6 +964,9 @@
 		req = elv_next_request(q);
 
 		if (SDpnt->device_busy >= SDpnt->queue_depth)
+			break;
+
+		if (SDpnt->single_lun && check_all_luns(SDpnt))
 			break;
 
 		if(SHpnt->host_busy == 0 && SHpnt->host_blocked) {


-- Patrick Mansfield

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] add back single_lun support
  2003-02-05 22:51 [PATCH] add back single_lun support Patrick Mansfield
@ 2003-02-05 23:14 ` James Bottomley
  2003-02-06  1:16   ` Patrick Mansfield
  2003-02-06 14:27   ` Christoph Hellwig
  0 siblings, 2 replies; 4+ messages in thread
From: James Bottomley @ 2003-02-05 23:14 UTC (permalink / raw)
  To: Patrick Mansfield; +Cc: SCSI Mailing List

On Wed, 2003-02-05 at 16:51, Patrick Mansfield wrote:
> This patch against the current scsi-misc-2.5 adds back the check for the
> single_lun case.
> 
> I compiled and booted with this applied but don't have any devices (i.e.
> CD ROM changer) for testing.
> 
> --- 1.66/drivers/scsi/scsi_lib.c	Wed Feb  5 08:33:15 2003
> +++ edited/drivers/scsi/scsi_lib.c	Tue Feb 11 14:27:08 2003
> @@ -787,6 +787,22 @@
>  	return ret;
>  }
>  
> +/*
> + * The target associated with myself can only handle one active command at
> + * a time. Scan through all of the luns on the same target as myself,
> + * return 1 if any are active.
> + */
> +static int check_all_luns(struct scsi_device *myself)
> +{
> +	struct scsi_device *sdev;
> +
> +	list_for_each_entry(sdev, &myself->same_target_siblings,
> +			    same_target_siblings)
> +		if (atomic_read(&sdev->device_active))
> +			return 1;
> +	return 0;
> +}
> +

I don't see device_active getting set anywhere.

shouldn't we just dump device_active in favour of a non-zero check of
device_busy (it's all done under the queue lock, anyway).

James



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] add back single_lun support
  2003-02-05 23:14 ` James Bottomley
@ 2003-02-06  1:16   ` Patrick Mansfield
  2003-02-06 14:27   ` Christoph Hellwig
  1 sibling, 0 replies; 4+ messages in thread
From: Patrick Mansfield @ 2003-02-06  1:16 UTC (permalink / raw)
  To: James Bottomley; +Cc: SCSI Mailing List

On Wed, Feb 05, 2003 at 05:14:00PM -0600, James Bottomley wrote:

> I don't see device_active getting set anywhere.
> 
> shouldn't we just dump device_active in favour of a non-zero check of
> device_busy (it's all done under the queue lock, anyway).
> 
> James

OK - once more.

This patch against the current scsi-misc-2.5 adds back the check for the
single_lun case and removes the unused device_active field.

I compiled and booted with this applied but don't have any devices (i.e.
CD ROM changer) for testing.

--- 1.58/drivers/scsi/scsi.h	Tue Feb  4 11:14:16 2003
+++ edited/drivers/scsi/scsi.h	Wed Feb  5 17:36:00 2003
@@ -570,7 +570,6 @@
 					   device is busy */
 	struct Scsi_Host *host;
 	request_queue_t *request_queue;
-        atomic_t                device_active; /* commands checked out for device */
 	volatile unsigned short device_busy;	/* commands actually active on low-level */
 	struct list_head free_cmnds;    /* list of available Scsi_Cmnd structs */
 	struct list_head busy_cmnds;    /* list of Scsi_Cmnd structs in use */
===== drivers/scsi/scsi_lib.c 1.66 vs edited =====
--- 1.66/drivers/scsi/scsi_lib.c	Wed Feb  5 08:33:15 2003
+++ edited/drivers/scsi/scsi_lib.c	Wed Feb  5 17:44:10 2003
@@ -787,6 +787,22 @@
 	return ret;
 }
 
+/*
+ * The target associated with myself can only handle one active command at
+ * a time. Scan through all of the luns on the same target as myself,
+ * return 1 if any are active.
+ */
+static int check_all_luns(struct scsi_device *myself)
+{
+	struct scsi_device *sdev;
+
+	list_for_each_entry(sdev, &myself->same_target_siblings,
+			    same_target_siblings)
+		if (sdev->device_busy)
+			return 1;
+	return 0;
+}
+
 int scsi_prep_fn(struct request_queue *q, struct request *req)
 {
 	struct Scsi_Device_Template *STpnt;
@@ -948,6 +964,9 @@
 		req = elv_next_request(q);
 
 		if (SDpnt->device_busy >= SDpnt->queue_depth)
+			break;
+
+		if (SDpnt->single_lun && check_all_luns(SDpnt))
 			break;
 
 		if(SHpnt->host_busy == 0 && SHpnt->host_blocked) {

-- Patrick Mansfield

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] add back single_lun support
  2003-02-05 23:14 ` James Bottomley
  2003-02-06  1:16   ` Patrick Mansfield
@ 2003-02-06 14:27   ` Christoph Hellwig
  1 sibling, 0 replies; 4+ messages in thread
From: Christoph Hellwig @ 2003-02-06 14:27 UTC (permalink / raw)
  To: James Bottomley; +Cc: Patrick Mansfield, SCSI Mailing List

On Wed, Feb 05, 2003 at 05:14:00PM -0600, James Bottomley wrote:
> I don't see device_active getting set anywhere.

The same is true for host_active, btw..


--- 1.49/drivers/scsi/hosts.c	Tue Feb  4 17:27:21 2003
+++ edited/drivers/scsi/hosts.c	Thu Feb  6 15:01:27 2003
@@ -392,7 +392,6 @@
 
 	spin_lock_init(&shost->default_lock);
 	scsi_assign_lock(shost, &shost->default_lock);
-	atomic_set(&shost->host_active,0);
 	INIT_LIST_HEAD(&shost->my_devices);
 
 	init_waitqueue_head(&shost->host_wait);
===== drivers/scsi/hosts.h 1.51 vs edited =====
--- 1.51/drivers/scsi/hosts.h	Tue Feb  4 17:27:21 2003
+++ edited/drivers/scsi/hosts.h	Thu Feb  6 14:58:38 2003
@@ -396,7 +396,6 @@
     unsigned int            eh_kill:1; /* set when killing the eh thread */
     wait_queue_head_t       host_wait;
     Scsi_Host_Template    * hostt;
-    atomic_t                host_active; /* commands checked out */
     volatile unsigned short host_busy;   /* commands actually active on low-level */
     volatile unsigned short host_failed; /* commands that failed. */
     
===== drivers/scsi/scsi.c 1.87 vs edited =====
--- 1.87/drivers/scsi/scsi.c	Wed Feb  5 17:14:41 2003
+++ edited/drivers/scsi/scsi.c	Thu Feb  6 14:59:16 2003
@@ -994,11 +994,11 @@
 				 * Here we have a fatal error of some sort.
 				 * Turn it over to the error handler.
 				 */
-				SCSI_LOG_MLCOMPLETE(3, printk("Command failed %p %x active=%d busy=%d failed=%d\n",
-						    SCpnt, SCpnt->result,
-				  atomic_read(&SCpnt->device->host->host_active),
-						  SCpnt->device->host->host_busy,
-					      SCpnt->device->host->host_failed));
+				SCSI_LOG_MLCOMPLETE(3,
+					printk("Command failed %p %x busy=%d failed=%d\n",
+						SCpnt, SCpnt->result,
+						SCpnt->device->host->host_busy,
+						SCpnt->device->host->host_failed));
 
 				/*
 				 * Dump the sense information too.
===== drivers/scsi/scsi_error.c 1.29 vs edited =====
--- 1.29/drivers/scsi/scsi_error.c	Tue Jan 28 17:19:34 2003
+++ edited/drivers/scsi/scsi_error.c	Thu Feb  6 15:00:33 2003
@@ -131,23 +131,22 @@
  **/
 void scsi_times_out(Scsi_Cmnd *scmd)
 {
+	struct Scsi_Host *shost = scmd->device->host;
+
 	/* Set the serial_number_at_timeout to the current serial_number */
 	scmd->serial_number_at_timeout = scmd->serial_number;
 
 	scsi_eh_eflags_set(scmd, SCSI_EH_CMD_TIMEOUT | SCSI_EH_CMD_ERR);
 
-	if( scmd->device->host->eh_wait == NULL ) {
+	if (unlikely(shost->eh_wait == NULL)) {
 		panic("Error handler thread not present at %p %p %s %d",
-		      scmd, scmd->device->host, __FILE__, __LINE__);
+		      scmd, shost, __FILE__, __LINE__);
 	}
 
-	scsi_host_failed_inc_and_test(scmd->device->host);
+	scsi_host_failed_inc_and_test(shost);
 
-	SCSI_LOG_TIMEOUT(3, printk("Command timed out active=%d busy=%d "
-				   " failed=%d\n",
-				   atomic_read(&scmd->device->host->host_active),
-				   scmd->device->host->host_busy,
-				   scmd->device->host->host_failed));
+	SCSI_LOG_TIMEOUT(3, printk("Command timed out busy=%d failed=%d\n",
+				   shost->host_busy, shost->host_failed));
 }
 
 /**
--- 1.14/drivers/scsi/scsi_proc.c	Fri Jan  3 19:58:50 2003
+++ edited/drivers/scsi/scsi_proc.c	Thu Feb  6 15:01:02 2003
@@ -345,10 +345,9 @@
 	i = 0;
 	for (shpnt = scsi_host_get_next(NULL); shpnt;
 	     shpnt = scsi_host_get_next(shpnt)) {
-		printk(KERN_INFO " %d %d %d : %d %d\n",
+		printk(KERN_INFO " %d %d : %d %d\n",
 		       shpnt->host_failed,
 		       shpnt->host_busy,
-		       atomic_read(&shpnt->host_active),
 		       shpnt->host_blocked,
 		       shpnt->host_self_blocked);
 	}

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-02-06 14:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-02-05 22:51 [PATCH] add back single_lun support Patrick Mansfield
2003-02-05 23:14 ` James Bottomley
2003-02-06  1:16   ` Patrick Mansfield
2003-02-06 14:27   ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox