req_flags_t rq_flags)
 {
        struct cdrom_info *info = drive->driver_data;
+       struct scsi_sense_hdr local_sshdr;
        int retries = 10;
        bool failed;
 
                                  "rq_flags: 0x%x",
                                  cmd[0], write, timeout, rq_flags);
 
+       if (!sshdr)
+               sshdr = &local_sshdr;
+
        /* start of retry loop */
        do {
                struct request *rq;
 
                if (buffer)
                        *bufflen = scsi_req(rq)->resid_len;
-               if (sshdr)
-                       scsi_normalize_sense(scsi_req(rq)->sense,
-                                            scsi_req(rq)->sense_len, sshdr);
+               scsi_normalize_sense(scsi_req(rq)->sense,
+                                    scsi_req(rq)->sense_len, sshdr);
 
                /*
                 * FIXME: we should probably abort/retry or something in case of
                         * The request failed.  Retry if it was due to a unit
                         * attention status (usually means media was changed).
                         */
-                       struct request_sense *reqbuf = scsi_req(rq)->sense;
-
-                       if (reqbuf->sense_key == UNIT_ATTENTION)
+                       if (sshdr->sense_key == UNIT_ATTENTION)
                                cdrom_saw_media_change(drive);
-                       else if (reqbuf->sense_key == NOT_READY &&
-                                reqbuf->asc == 4 && reqbuf->ascq != 4) {
+                       else if (sshdr->sense_key == NOT_READY &&
+                                sshdr->asc == 4 && sshdr->ascq != 4) {
                                /*
                                 * The drive is in the process of loading
                                 * a disk.  Retry, but wait a little to give