convert sr to scsi_execute_req
PATCH 1/1 convert sr to scsi_execute_req
This follows almost the identical model to sd, except that there's one ioctl which returns raw sense data, so it had to use scsi_execute() instead.
James
drivers/scsi/sr.c +10 -39
@@ -50,10 +50,10 @@#include <scsi/scsi_dbg.h> #include <scsi/scsi_device.h> #include <scsi/scsi_driver.h> +#include <scsi/scsi_cmnd.h> #include <scsi/scsi_eh.h> #include <scsi/scsi_host.h> #include <scsi/scsi_ioctl.h> /* For the door lock/unlock commands */ -#include <scsi/scsi_request.h> #include "scsi_logging.h" #include "sr.h"
@@ -658,39 +658,27 @@ static void get_sectorsize(struct scsi_cunsigned char *buffer;int the_result, retries =3 ;int sector_size; -struct scsi_request *SRpnt =NULL ;request_queue_t *queue; buffer =kmalloc (512 ,GFP_KERNEL |GFP_DMA );if (!buffer) goto Enomem; - SRpnt =scsi_allocate_request (cd->device,GFP_KERNEL ); -if (!SRpnt) - goto Enomem;do { cmd[0 ] =READ_CAPACITY ;memset ((void *) &cmd[1 ],0 ,9 ); -/* Mark as really busy */ - SRpnt->sr_request->rq_status =RQ_SCSI_BUSY ; - SRpnt->sr_cmd_len =0 ; -memset (buffer,0 ,8 );/* Do the command and wait.. */ - SRpnt->sr_data_direction =DMA_FROM_DEVICE ; -scsi_wait_req (SRpnt, (void *) cmd, (void *) buffer, -8 ,SR_TIMEOUT ,MAX_RETRIES ); + the_result =scsi_execute_req (cd->device, cmd,DMA_FROM_DEVICE , + buffer,8 ,NULL ,SR_TIMEOUT , +MAX_RETRIES ); - the_result = SRpnt->sr_result; retries--; }while (the_result && retries); -scsi_release_request (SRpnt); - SRpnt =NULL ; -if (the_result) { cd->capacity =0x1fffff ; sector_size =2048 ;/* A guess, just in case */
@@ -750,8 +738,6 @@ Enomem: cd->capacity =0x1fffff ; sector_size =2048 ;/* A guess, just in case */ cd->needs_sector_size =1 ; -if (SRpnt) -scsi_release_request (SRpnt); goto out; }
@@ -759,8 +745,8 @@ static void get_capabilities(struct scsi {unsigned char *buffer;struct scsi_mode_data data; -struct scsi_request *SRpnt;unsigned char cmd[MAX_COMMAND_SIZE ]; +struct scsi_sense_hdr sshdr;unsigned int the_result;int retries, rc, n;
@@ -776,19 +762,11 @@ static void get_capabilities(struct scsi "" }; -/* allocate a request for the TEST_UNIT_READY */ - SRpnt =scsi_allocate_request (cd->device,GFP_KERNEL ); -if (!SRpnt) { -printk (KERN_WARNING "(get_capabilities:) Request allocation " -"failure.\n" ); -return ; - }/* allocate transfer buffer */ buffer =kmalloc (512 ,GFP_KERNEL |GFP_DMA );if (!buffer) {printk (KERN_ERR "sr: out of memory.\n" ); -scsi_release_request (SRpnt);return ; }
@@ -800,20 +778,15 @@ static void get_capabilities(struct scsimemset ((void *)cmd,0 ,MAX_COMMAND_SIZE ); cmd[0 ] =TEST_UNIT_READY ; - SRpnt->sr_cmd_len =0 ; - SRpnt->sr_sense_buffer[0 ] =0 ; - SRpnt->sr_sense_buffer[2 ] =0 ; - SRpnt->sr_data_direction =DMA_NONE ; - -scsi_wait_req (SRpnt, (void *) cmd, buffer, -0 ,SR_TIMEOUT ,MAX_RETRIES ); + the_result =scsi_execute_req (cd->device, cmd,DMA_NONE ,NULL , +0 , &sshdr,SR_TIMEOUT , +MAX_RETRIES ); - the_result = SRpnt->sr_result; retries++; }while (retries <5 && (!scsi_status_is_good (the_result) || - ((driver_byte (the_result) &DRIVER_SENSE ) && - SRpnt->sr_sense_buffer[2 ] ==UNIT_ATTENTION ))); + (scsi_sense_valid (&sshdr) && + sshdr.sense_key ==UNIT_ATTENTION )));/* ask for mode page 0x2a */ rc = scsi_mode_sense(cd->device, 0, 0x2a, buffer, 128,
@@ -825,7 +798,6 @@ static void get_capabilities(struct scsi cd->cdi.mask |= (CDC_CD_R |CDC_CD_RW |CDC_DVD_R |CDC_DVD |CDC_DVD_RAM |CDC_SELECT_DISC |CDC_SELECT_SPEED ); -scsi_release_request (SRpnt);kfree (buffer);printk ("%s: scsi-1 drive\n" , cd->cdi.name);return ;
@@ -885,7 +857,6 @@ static void get_capabilities(struct scsi cd->device->writeable =1 ; } -scsi_release_request (SRpnt);kfree (buffer); }
drivers/scsi/sr_ioctl.c +27 -35
120 lines not on this page · raw message