int good_bytes = (result == 0 ? this_count : 0);
        int block_sectors = 0;
        long error_sector;
-       struct scsi_cd *cd = scsi_cd(SCpnt->request->rq_disk);
+       struct request *rq = scsi_cmd_to_rq(SCpnt);
+       struct scsi_cd *cd = scsi_cd(rq->rq_disk);
 
 #ifdef DEBUG
        scmd_printk(KERN_INFO, SCpnt, "done: %x\n", result);
                                break;
                        error_sector =
                                get_unaligned_be32(&SCpnt->sense_buffer[3]);
-                       if (SCpnt->request->bio != NULL)
-                               block_sectors =
-                                       bio_sectors(SCpnt->request->bio);
+                       if (rq->bio != NULL)
+                               block_sectors = bio_sectors(rq->bio);
                        if (block_sectors < 4)
                                block_sectors = 4;
                        if (cd->device->sector_size == 2048)
                                error_sector <<= 2;
                        error_sector &= ~(block_sectors - 1);
-                       good_bytes = (error_sector -
-                                     blk_rq_pos(SCpnt->request)) << 9;
+                       good_bytes = (error_sector - blk_rq_pos(rq)) << 9;
                        if (good_bytes < 0 || good_bytes >= this_count)
                                good_bytes = 0;
                        /*
 {
        int block = 0, this_count, s_size;
        struct scsi_cd *cd;
-       struct request *rq = SCpnt->request;
+       struct request *rq = scsi_cmd_to_rq(SCpnt);
        blk_status_t ret;
 
        ret = scsi_alloc_sgtables(SCpnt);