usb-storage: make use of srb local variable
authorAlan Stern <stern@rowland.harvard.edu>
Wed, 25 Oct 2017 14:40:05 +0000 (10:40 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Nov 2017 15:57:23 +0000 (16:57 +0100)
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 <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/usb.c

index 0dceb9fa3a0629af3bd1a1990508d2c32bb42db2..1ae2b8554a885c6328356dc95ee509f84331ed47 100644 (file)
@@ -332,7 +332,7 @@ static int usb_stor_control_thread(void * __us)
 
                /* 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 * __us)
 
                /* 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 * __us)
                 * 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 * __us)
 
                        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 * __us)
                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() */