static int scsi_setup_flush_cmnd(struct scsi_device *sdp, struct request *rq)
 {
-       rq->timeout = SD_FLUSH_TIMEOUT;
+       rq->timeout *= SD_FLUSH_TIMEOUT_MULTIPLIER;
        rq->retries = SD_MAX_RETRIES;
        rq->cmd[0] = SYNCHRONIZE_CACHE;
        rq->cmd_len = 10;
 {
        int retries, res;
        struct scsi_device *sdp = sdkp->device;
+       const int timeout = sdp->request_queue->rq_timeout
+               * SD_FLUSH_TIMEOUT_MULTIPLIER;
        struct scsi_sense_hdr sshdr;
 
        if (!scsi_device_online(sdp))
                 * flush everything.
                 */
                res = scsi_execute_req_flags(sdp, cmd, DMA_NONE, NULL, 0,
-                                            &sshdr, SD_FLUSH_TIMEOUT,
-                                            SD_MAX_RETRIES, NULL, REQ_PM);
+                                            &sshdr, timeout, SD_MAX_RETRIES,
+                                            NULL, REQ_PM);
                if (res == 0)
                        break;
        }
 
  */
 #define SD_TIMEOUT             (30 * HZ)
 #define SD_MOD_TIMEOUT         (75 * HZ)
-#define SD_FLUSH_TIMEOUT       (60 * HZ)
+/*
+ * Flush timeout is a multiplier over the standard device timeout which is
+ * user modifiable via sysfs but initially set to SD_TIMEOUT
+ */
+#define SD_FLUSH_TIMEOUT_MULTIPLIER    2
 #define SD_WRITE_SAME_TIMEOUT  (120 * HZ)
 
 /*