Re: PATCH; make sr.c respect use_10_for_ms

James Bottomley
2003-06-22T00:11:55Z

In general, you would have been a bit better off just doing a

if(cd->device->use_10_for_ms) {
cgc.cmd[0] = MODE_SENSE_10;
cgc.cmd[8] = 128;
} else {
cdc.cmd[0] = MODE_SENSE;
cgc.cmd[4] = 128;
}

Rather than duplicating so much code.

This:

> + if (cd->device->use_10_for_ms) {
> + memset(&cgc, 0, sizeof(struct cdrom_generic_command));
> + cgc.cmd[0] = MODE_SENSE_10;
> + cgc.cmd[2] = 0x2a; /* page code */
> + cgc.cmd[8] = 128; /* allocation length */
> + cgc.buffer = buffer;
> + cgc.buflen = 128;
> + cgc.quiet = 1;
> + cgc.data_direction = SCSI_DATA_READ;
> + cgc.timeout = SR_TIMEOUT;
> + rc = sr_do_ioctl(cd, &cgc);
> + }
> +
> + /* if we got an error, return to old behavior */
> + if (rc)
> + cd->device->use_10_for_ms = 0;

Is slightly incorrect. Mode sense commands can return errors for many
reasons, you need to check for ILLEGAL_REQUEST sense before assuming it
was a problem with the command.

What probably should happen is that the resetting of the flag should be
in scsi_io_completion (like it is for the use_10_for_rw flag), then the
retry and the flag reset would come for free.

James