diff options
author | Tom Yan <tom.ty89@gmail.com> | 2016-07-13 04:31:23 +0800 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2016-07-12 16:37:17 -0400 |
commit | 2983860c766870b701c4a34f435c1e18db086244 (patch) | |
tree | c9c084dc70f54fd860baead437e37f3e1ae9844b /include/linux | |
parent | 5c79097a28c2525740dd9e4470676ec9d25bee45 (diff) |
libata-scsi: avoid repeated calculation of number of TRIM ranges
Currently libata statically allows only 1-block (512-byte) payload
for each TRIM command. Each payload can carry 64 TRIM ranges since
each range requires 8 bytes.
It is silly to keep doing the calculation (512 / 8) in different
places. Hence, define the new ATA_MAX_TRIM_RNUM for the result.
Signed-off-by: Tom Yan <tom.ty89@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ata.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index 2d6879392ae3..d20b1ee127b0 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h @@ -48,6 +48,7 @@ enum { ATA_MAX_SECTORS_1024 = 1024, ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ ATA_MAX_SECTORS_TAPE = 65535, + ATA_MAX_TRIM_RNUM = 64, /* 512-byte payload / (6-byte LBA + 2-byte range per entry) */ ATA_ID_WORDS = 256, ATA_ID_CONFIG = 0, @@ -1069,12 +1070,12 @@ static inline void ata_id_to_hd_driveid(u16 *id) * TO NV CACHE PINNED SET. */ static inline unsigned ata_set_lba_range_entries(void *_buffer, - unsigned buf_size, u64 sector, unsigned long count) + unsigned num, u64 sector, unsigned long count) { __le64 *buffer = _buffer; unsigned i = 0, used_bytes; - while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */ + while (i < num) { u64 entry = sector | ((u64)(count > 0xffff ? 0xffff : count) << 48); buffer[i++] = __cpu_to_le64(entry); |