Re: SCSI Sense Information in usb-storage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 1 Feb 2014, Steph Nguyen wrote:

> To be clear, here's what I meant by "build" - I'm just pasting the 
> relevant bits of the code:
> 
> static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct 
> us_data *us) {
> 	...
> 	unsigned char *sb = srb->sense_buffer;
> 	...
> 	if ((srb->result != (DID_ERROR << 16) && srb->result != (DID_ABORT << 
> 16)) && ...)
> 		memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
> 		...
> 		sb[0] = 0x72;
> 
> So, unless I'm completely misunderstanding the code, here the command is 
> supposed to have completed successfully, isn't it? And the 
> sense_buffer[0] is filled with 0x72 when it completes successfully.

That's right.  But here the command isn't a SCSI command; it's an ATA
command getting sent over a SCSI transport.

Furthermore, this doesn't happen unless scsi_cmnd->cmnd[2] & 0x20 is
nonzero (part of the "if" condition that you left out), which
apparently is a flag indicating that the command is always supposed to
return sense data, even when it completes normally (the comment calls
it "ck_cond").

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux