* [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