diff options
author | Tom Yan <tom.ty89@gmail.com> | 2016-07-12 16:31:23 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2016-07-12 16:37:17 -0400 |
commit | 2983860c766870b701c4a34f435c1e18db086244 (patch) | |
tree | c9c084dc70f54fd860baead437e37f3e1ae9844b /include/linux/ata.h | |
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/ata.h')
-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 { | |||
48 | ATA_MAX_SECTORS_1024 = 1024, | 48 | ATA_MAX_SECTORS_1024 = 1024, |
49 | ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ | 49 | ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ |
50 | ATA_MAX_SECTORS_TAPE = 65535, | 50 | ATA_MAX_SECTORS_TAPE = 65535, |
51 | ATA_MAX_TRIM_RNUM = 64, /* 512-byte payload / (6-byte LBA + 2-byte range per entry) */ | ||
51 | 52 | ||
52 | ATA_ID_WORDS = 256, | 53 | ATA_ID_WORDS = 256, |
53 | ATA_ID_CONFIG = 0, | 54 | ATA_ID_CONFIG = 0, |
@@ -1069,12 +1070,12 @@ static inline void ata_id_to_hd_driveid(u16 *id) | |||
1069 | * TO NV CACHE PINNED SET. | 1070 | * TO NV CACHE PINNED SET. |
1070 | */ | 1071 | */ |
1071 | static inline unsigned ata_set_lba_range_entries(void *_buffer, | 1072 | static inline unsigned ata_set_lba_range_entries(void *_buffer, |
1072 | unsigned buf_size, u64 sector, unsigned long count) | 1073 | unsigned num, u64 sector, unsigned long count) |
1073 | { | 1074 | { |
1074 | __le64 *buffer = _buffer; | 1075 | __le64 *buffer = _buffer; |
1075 | unsigned i = 0, used_bytes; | 1076 | unsigned i = 0, used_bytes; |
1076 | 1077 | ||
1077 | while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */ | 1078 | while (i < num) { |
1078 | u64 entry = sector | | 1079 | u64 entry = sector | |
1079 | ((u64)(count > 0xffff ? 0xffff : count) << 48); | 1080 | ((u64)(count > 0xffff ? 0xffff : count) << 48); |
1080 | buffer[i++] = __cpu_to_le64(entry); | 1081 | buffer[i++] = __cpu_to_le64(entry); |