ChangeSet 1.982, 2003/02/04 10:54:46+11:00, [EMAIL PROTECTED]
[PATCH] usb-storage: remove US_FL_DEV_ATTACHED
This patch removes the US_FL_DEV_ATTACHED flag, which is now rendered
obsolete by the new hotplug system.
It also adds a comment or two about areas of code that need to be
re-examined.
diff -Nru a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
--- a/drivers/usb/storage/scsiglue.c Tue Feb 4 15:16:49 2003
+++ b/drivers/usb/storage/scsiglue.c Tue Feb 4 15:16:49 2003
@@ -197,11 +197,10 @@
/* lock the device pointers */
down(&(us->dev_semaphore));
- /* if the device was removed, then we're already reset */
- if (!(us->flags & US_FL_DEV_ATTACHED))
- result = SUCCESS;
- else
- result = us->transport_reset(us);
+ /* do the reset */
+ result = us->transport_reset(us);
+
+ /* unlock */
up(&(us->dev_semaphore));
/* lock access to the state and clear it */
@@ -214,31 +213,27 @@
* disconnect/reconnect for all drivers which have claimed
* interfaces, including ourself. */
/* This is always called with scsi_lock(srb->host) held */
+
+/* FIXME: This needs to be re-examined in the face of the new
+ * hotplug system -- this will implicitly cause a detach/reattach of
+ * usb-storage, which is not what we want now.
+ *
+ * Can we just skip over usb-storage in the while loop?
+ */
static int usb_storage_bus_reset( Scsi_Cmnd *srb )
{
- struct us_data *us = (struct us_data *)srb->host->hostdata[0];
+ struct us_data *us;
int i;
int result;
- struct usb_device *pusb_dev_save;
/* we use the usb_reset_device() function to handle this for us */
US_DEBUGP("bus_reset() called\n");
+ us = (struct us_data *)srb->host->hostdata[0];
scsi_unlock(srb->host);
- /* if the device has been removed, this worked */
- down(&us->dev_semaphore);
- if (!(us->flags & US_FL_DEV_ATTACHED)) {
- US_DEBUGP("-- device removed already\n");
- up(&us->dev_semaphore);
- scsi_lock(srb->host);
- return SUCCESS;
- }
- pusb_dev_save = us->pusb_dev;
- up(&us->dev_semaphore);
-
/* attempt to reset the port */
- result = usb_reset_device(pusb_dev_save);
+ result = usb_reset_device(us->pusb_dev);
US_DEBUGP("usb_reset_device returns %d\n", result);
if (result < 0) {
scsi_lock(srb->host);
@@ -248,9 +243,9 @@
/* FIXME: This needs to lock out driver probing while it's working
* or we can have race conditions */
/* This functionality really should be provided by the khubd thread */
- for (i = 0; i < pusb_dev_save->actconfig->desc.bNumInterfaces; i++) {
+ for (i = 0; i < us->pusb_dev->actconfig->desc.bNumInterfaces; i++) {
struct usb_interface *intf =
- &pusb_dev_save->actconfig->interface[i];
+ &us->pusb_dev->actconfig->interface[i];
/* if this is an unclaimed interface, skip it */
if (!intf->driver) {
@@ -313,10 +308,6 @@
/* show the protocol and transport */
SPRINTF(" Protocol: %s\n", us->protocol_name);
SPRINTF(" Transport: %s\n", us->transport_name);
-
- /* show attached status of the device */
- SPRINTF(" Attached: %s\n", (us->flags & US_FL_DEV_ATTACHED ?
- "Yes" : "No"));
/*
* Calculate start of next buffer, and return value.
diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
--- a/drivers/usb/storage/usb.c Tue Feb 4 15:16:49 2003
+++ b/drivers/usb/storage/usb.c Tue Feb 4 15:16:49 2003
@@ -385,35 +385,6 @@
us->srb->result = CHECK_CONDITION << 1;
}
- /* our device has gone - pretend not ready */
- else if (!(us->flags & US_FL_DEV_ATTACHED)) {
- US_DEBUGP("Request is for removed device\n");
- /* For REQUEST_SENSE, it's the data. But
- * for anything else, it should look like
- * we auto-sensed for it.
- */
- if (us->srb->cmnd[0] == REQUEST_SENSE) {
- memcpy(us->srb->request_buffer,
- usb_stor_sense_notready,
- sizeof(usb_stor_sense_notready));
- us->srb->result = GOOD << 1;
- } else if(us->srb->cmnd[0] == INQUIRY) {
- /* INQUIRY should always work, per spec... */
- unsigned char data_ptr[36] = {
- 0x20, 0x80, 0x02, 0x02,
- 0x1F, 0x00, 0x00, 0x00};
- US_DEBUGP("Faking INQUIRY command for disconnected
device\n");
- fill_inquiry_response(us, data_ptr, 36);
- us->srb->result = GOOD << 1;
- } else {
- /* not ready */
- memcpy(us->srb->sense_buffer,
- usb_stor_sense_notready,
- sizeof(usb_stor_sense_notready));
- us->srb->result = CHECK_CONDITION << 1;
- }
- } /* !(us->flags & US_FL_DEV_ATTACHED) */
-
/* Handle those devices which need us to fake
* their inquiry data */
else if ((us->srb->cmnd[0] == INQUIRY) &&
@@ -537,7 +508,6 @@
}
/* mark the device as gone */
- ss->flags &= ~ US_FL_DEV_ATTACHED;
usb_put_dev(ss->pusb_dev);
ss->pusb_dev = NULL;
}
@@ -691,7 +661,6 @@
/* copy over the subclass and protocol data */
ss->subclass = subclass;
ss->protocol = protocol;
- ss->flags = flags | US_FL_DEV_ATTACHED;
ss->unusual_dev = unusual_dev;
/* copy over the endpoint data */
diff -Nru a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h
--- a/drivers/usb/storage/usb.h Tue Feb 4 15:16:49 2003
+++ b/drivers/usb/storage/usb.h Tue Feb 4 15:16:49 2003
@@ -77,7 +77,6 @@
#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs fixing */
#define US_FL_FIX_CAPACITY 0x00000080 /* READ CAPACITY response too big */
-#define US_FL_DEV_ATTACHED 0x00010000 /* is the device attached? */
#define US_FLIDX_CAN_CANCEL 18 /* 0x00040000 okay to cancel current_urb? */
#define US_FLIDX_CANCEL_SG 19 /* 0x00080000 okay to cancel current_sg? */
@@ -100,7 +99,6 @@
/* The device we're working with
* It's important to note:
* (o) you must hold dev_semaphore to change pusb_dev
- * (o) DEV_ATTACHED in flags should change whenever pusb_dev does
*/
struct semaphore dev_semaphore; /* protect pusb_dev */
struct usb_device *pusb_dev; /* this usb_device */
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel