SAT3r07: ATA_PASSTHROUGH and transfer length

Hannes Reinecke hare at
Fri Jun 12 05:12:39 PDT 2015

* From the T10 Reflector (t10 at, posted by:
* Hannes Reinecke <hare at>
Hi all,
I have been notified that the linux SATL does not set the 't_type'
and 't_length' bits in the ATA PASS-THROUGH command correctly.
Trying to fix this up I've come across this oddity:
As per spec 't_length' specifies the location where the transfer
length is located; this can either be the 'features' field, the
'sector_count' field, or the TPSIU location.
However, some commands (like IDENTIFY) return a single block,
and implicitly assume a transfer length of 512 bytes without having
it specified in any fields. Currently 't_length' is set to '0', but
this runs agains the spec, which claims this to signal 'No data is
Other commands (like TRUSTED RECEIVE) have split location (the lower
byte is in the 'count' field, the high byte is in the low byte of
the 'lba' field).
What is the appropriate value of 't_length' in these cases?
Dr. Hannes Reinecke			       zSeries & Storage
hare at				       +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
* For T10 Reflector information, send a message with
* 'info t10' (no quotes) in the message body to majordomo at

More information about the T10 mailing list