On 06/29/2014 03:34 PM, Christoph Hellwig wrote:
Simplify handling of flush requests by setting up the command directly
instead of initializing request fields and then calling
scsi_setup_blk_pc_cmnd to propagate the information into the command.

Also rename scsi_setup_flush_cmnd to sd_setup_flush_cmnd for consistency.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
  drivers/scsi/sd.c |   20 +++++++++++++-------
  1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index d88bdc8..620d32f 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -844,14 +844,20 @@ static int sd_setup_write_same_cmnd(struct scsi_device 
*sdp, struct request *rq)
        return ret;
  }

-static int scsi_setup_flush_cmnd(struct scsi_device *sdp, struct request *rq)
+static int sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
  {
-       rq->timeout *= SD_FLUSH_TIMEOUT_MULTIPLIER;
-       rq->retries = SD_MAX_RETRIES;
-       rq->cmd[0] = SYNCHRONIZE_CACHE;
-       rq->cmd_len = 10;
+       struct request *rq = cmd->request;
+
+       /* flush requests don't perform I/O, zero the S/G table */
+       memset(&cmd->sdb, 0, sizeof(cmd->sdb));

-       return scsi_setup_blk_pc_cmnd(sdp, rq);
+       cmd->cmnd[0] = SYNCHRONIZE_CACHE;
+       cmd->cmd_len = 10;
+       cmd->transfersize = 0;
+       cmd->allowed = SD_MAX_RETRIES;
+
+       rq->timeout *= SD_FLUSH_TIMEOUT_MULTIPLIER;
+       return BLKPREP_OK;
  }

  static void sd_uninit_command(struct scsi_cmnd *SCpnt)
@@ -891,7 +897,7 @@ static int sd_init_command(struct scsi_cmnd *SCpnt)
                ret = sd_setup_write_same_cmnd(sdp, rq);
                goto out;
        } else if (rq->cmd_flags & REQ_FLUSH) {
-               ret = scsi_setup_flush_cmnd(sdp, rq);
+               ret = sd_setup_flush_cmnd(SCpnt);
                goto out;
        }
        ret = scsi_init_io(SCpnt, GFP_ATOMIC);

Reviewed-by: Hannes Reinecke <h...@suse.de>

Cheers,

Hannes
--
Dr. Hannes Reinecke                   zSeries & Storage
h...@suse.de                          +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
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