Skip to content

Commit a357f7b

Browse files
John GarryDamien Le Moal
authored andcommitted
ata: libata: Set __ATA_BASE_SHT max_sectors
Commit 0568e61 ("ata: libata-scsi: cap ata_device->max_sectors according to shost->max_sectors") inadvertently capped the max_sectors value for some SATA disks to a value which is lower than we would want. For a device which supports LBA48, we would previously have request queue max_sectors_kb and max_hw_sectors_kb values of 1280 and 32767 respectively. For AHCI controllers, the value chosen for shost max sectors comes from the minimum of the SCSI host default max sectors in SCSI_DEFAULT_MAX_SECTORS (1024) and the shost DMA device mapping limit. This means that we would now set the max_sectors_kb and max_hw_sectors_kb values for a disk which supports LBA48 at 512, ignoring DMA mapping limit. As report by Oliver at [0], this caused a performance regression. Fix by picking a large enough max sectors value for ATA host controllers such that we don't needlessly reduce max_sectors_kb for LBA48 disks. [0] https://lore.kernel.org/linux-ide/YvsGbidf3na5FpGb@xsang-OptiPlex-9020/T/#m22d9fc5ad15af66066dd9fecf3d50f1b1ef11da3 Fixes: 0568e61 ("ata: libata-scsi: cap ata_device->max_sectors according to shost->max_sectors") Reported-by: Oliver Sang <[email protected]> Signed-off-by: John Garry <[email protected]> Signed-off-by: Damien Le Moal <[email protected]>
1 parent d3122bf commit a357f7b

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

include/linux/libata.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1382,7 +1382,8 @@ extern const struct attribute_group *ata_common_sdev_groups[];
13821382
.proc_name = drv_name, \
13831383
.slave_destroy = ata_scsi_slave_destroy, \
13841384
.bios_param = ata_std_bios_param, \
1385-
.unlock_native_capacity = ata_scsi_unlock_native_capacity
1385+
.unlock_native_capacity = ata_scsi_unlock_native_capacity,\
1386+
.max_sectors = ATA_MAX_SECTORS_LBA48
13861387

13871388
#define ATA_SUBBASE_SHT(drv_name) \
13881389
__ATA_BASE_SHT(drv_name), \

0 commit comments

Comments
 (0)