On Sun, 6 Dec 2009 11:07:03 +0100 Bart Van Assche <bart.vanassche@xxxxxxxxx> wrote: > While reverse engineering the libsrp source code I came across the > following statement in the function called srp_transfer_data(): > > offset = cmd->add_cdb_len * 4; > > This offset is computed such that the code below it can skip the > ADDITIONAL CDB section in SRP_CMD requests. According to the header > file include/scsi/srp.h, the field add_cdb_len corresponds to the > one-byte field at byte offset 31 in the SRP_CMD request. And according > to the SRP spec (draft r16a), the layout of the field at offset 31 is > as follows: > * Bits 0 and 1 are reserved. > * Bits 2 to 7 represent the ADDITIONAL CDB LENGTH field, symbolically > represented as n. > The SRP spec also makes clear that the ADDITIONAL CDB section takes 4*n bytes. > > If my interpretation of the srp.h header file and the SRP spec is > correct, the above statement should be replaced by: > > offset = (cmd->add_cdb_len >> 2) * 4; > > or, equivalently: > > offset = cmd->add_cdb_len & ~3; Oops, good catch. Either is fine by me. The reserved bits shall be set to zero in SCSI though. > Not ignoring the lower two bits of the add_cdb_len field would be > dangerous because at least the ibmvscsi driver uses these bits as > flags. Hmm, where does the ibmvscsi driver use these bits? Thanks, -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html