Commit 8b52291a0743 ("usb-storage: fix deadlock involving host lock
and scsi_done") added a local variable to usb_stor_control_thread() in
the usb-storage driver.  This local variable holds the value of
us->srb, for use after the host lock has been released.

But as long as we have the value in a local variable, we may as well
use it instead of dereferencing the us pointer all over the place.
This patch makes no functional change; it just makes the code a little
shorter and a little neater.

Signed-off-by: Alan Stern <[email protected]>

---


[as1852]


 drivers/usb/storage/usb.c |   34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

Index: usb-4.x/drivers/usb/storage/usb.c
===================================================================
--- usb-4.x.orig/drivers/usb/storage/usb.c
+++ usb-4.x/drivers/usb/storage/usb.c
@@ -332,7 +332,7 @@ static int usb_stor_control_thread(void
 
                /* When we are called with no command pending, we're done */
                srb = us->srb;
-               if (us->srb == NULL) {
+               if (srb == NULL) {
                        scsi_unlock(host);
                        mutex_unlock(&us->dev_mutex);
                        usb_stor_dbg(us, "-- exiting\n");
@@ -341,7 +341,7 @@ static int usb_stor_control_thread(void
 
                /* has the command timed out *already* ? */
                if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
-                       us->srb->result = DID_ABORT << 16;
+                       srb->result = DID_ABORT << 16;
                        goto SkipForAbort;
                }
 
@@ -351,35 +351,35 @@ static int usb_stor_control_thread(void
                 * reject the command if the direction indicator
                 * is UNKNOWN
                 */
-               if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
+               if (srb->sc_data_direction == DMA_BIDIRECTIONAL) {
                        usb_stor_dbg(us, "UNKNOWN data direction\n");
-                       us->srb->result = DID_ERROR << 16;
+                       srb->result = DID_ERROR << 16;
                }
 
                /*
                 * reject if target != 0 or if LUN is higher than
                 * the maximum known LUN
                 */
-               else if (us->srb->device->id &&
+               else if (srb->device->id &&
                                !(us->fflags & US_FL_SCM_MULT_TARG)) {
                        usb_stor_dbg(us, "Bad target number (%d:%llu)\n",
-                                    us->srb->device->id,
-                                    us->srb->device->lun);
-                       us->srb->result = DID_BAD_TARGET << 16;
+                                    srb->device->id,
+                                    srb->device->lun);
+                       srb->result = DID_BAD_TARGET << 16;
                }
 
-               else if (us->srb->device->lun > us->max_lun) {
+               else if (srb->device->lun > us->max_lun) {
                        usb_stor_dbg(us, "Bad LUN (%d:%llu)\n",
-                                    us->srb->device->id,
-                                    us->srb->device->lun);
-                       us->srb->result = DID_BAD_TARGET << 16;
+                                    srb->device->id,
+                                    srb->device->lun);
+                       srb->result = DID_BAD_TARGET << 16;
                }
 
                /*
                 * Handle those devices which need us to fake
                 * their inquiry data
                 */
-               else if ((us->srb->cmnd[0] == INQUIRY) &&
+               else if ((srb->cmnd[0] == INQUIRY) &&
                            (us->fflags & US_FL_FIX_INQUIRY)) {
                        unsigned char data_ptr[36] = {
                            0x00, 0x80, 0x02, 0x02,
@@ -387,13 +387,13 @@ static int usb_stor_control_thread(void
 
                        usb_stor_dbg(us, "Faking INQUIRY command\n");
                        fill_inquiry_response(us, data_ptr, 36);
-                       us->srb->result = SAM_STAT_GOOD;
+                       srb->result = SAM_STAT_GOOD;
                }
 
                /* we've got a command, let's do it! */
                else {
-                       US_DEBUG(usb_stor_show_command(us, us->srb));
-                       us->proto_handler(us->srb, us);
+                       US_DEBUG(usb_stor_show_command(us, srb));
+                       us->proto_handler(srb, us);
                        usb_mark_last_busy(us->pusb_dev);
                }
 
@@ -401,7 +401,7 @@ static int usb_stor_control_thread(void
                scsi_lock(host);
 
                /* was the command aborted? */
-               if (us->srb->result == DID_ABORT << 16) {
+               if (srb->result == DID_ABORT << 16) {
 SkipForAbort:
                        usb_stor_dbg(us, "scsi command aborted\n");
                        srb = NULL;     /* Don't call srb->scsi_done() */

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to