Don't bother returning a stale pointer when a bool does the work much
better.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 drivers/scsi/scsi_lib.c |   34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index a206da5..c6fc552 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -531,17 +531,16 @@ static void __scsi_release_buffers(struct scsi_cmnd *, 
int);
  *
  * Lock status: Assumed that lock is not held upon entry.
  *
- * Returns:     cmd if requeue required, NULL otherwise.
+ * Returns:     false if requeue required, true otherwise.
  *
  * Notes:       This is called for block device requests in order to
  *              mark some number of sectors as complete.
  * 
  *             We are guaranteeing that the request queue will be goosed
  *             at some point during this call.
- * Notes:      If cmd was requeued, upon return it will be a stale pointer.
  */
-static struct scsi_cmnd *scsi_end_request(struct scsi_cmnd *cmd, int error,
-                                         int bytes, int requeue)
+static bool scsi_end_request(struct scsi_cmnd *cmd, int error, int bytes,
+               int requeue)
 {
        struct request_queue *q = cmd->device->request_queue;
        struct request *req = cmd->request;
@@ -554,19 +553,18 @@ static struct scsi_cmnd *scsi_end_request(struct 
scsi_cmnd *cmd, int error,
                /* kill remainder if no retrys */
                if (error && scsi_noretry_cmd(cmd))
                        blk_end_request_all(req, error);
-               else {
-                       if (requeue) {
-                               /*
-                                * Bleah.  Leftovers again.  Stick the
-                                * leftovers in the front of the
-                                * queue, and goose the queue again.
-                                */
-                               scsi_release_buffers(cmd);
-                               scsi_requeue_command(q, cmd);
-                               cmd = NULL;
-                       }
-                       return cmd;
+               else if (requeue) {
+                       /*
+                        * Bleah.  Leftovers again.  Stick the
+                        * leftovers in the front of the
+                        * queue, and goose the queue again.
+                        */
+                       scsi_release_buffers(cmd);
+                       scsi_requeue_command(q, cmd);
+                       return true;
                }
+
+               return false;
        }
 
        /*
@@ -575,7 +573,7 @@ static struct scsi_cmnd *scsi_end_request(struct scsi_cmnd 
*cmd, int error,
         */
        __scsi_release_buffers(cmd, 0);
        scsi_next_command(cmd);
-       return NULL;
+       return true;
 }
 
 static inline unsigned int scsi_sgtable_index(unsigned short nents)
@@ -847,7 +845,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int 
good_bytes)
         * are leftovers and there is some kind of error
         * (result != 0), retry the rest.
         */
-       if (scsi_end_request(cmd, error, good_bytes, result == 0) == NULL)
+       if (scsi_end_request(cmd, error, good_bytes, result == 0))
                return;
 
        error = __scsi_error_from_host_byte(cmd, result);
-- 
1.7.10.4


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to