mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
sd: Fix max transfer length for 4k disks
The following patch fixes an issue observed with 4k sector disks where the max_hw_sectors attribute was getting set too large in sd_revalidate_disk. Since sdkp->max_xfer_blocks is in units of SCSI logical blocks and queue_max_hw_sectors is in units of 512 byte blocks, on a 4k sector disk, every time we went through sd_revalidate_disk, we were taking the current value of queue_max_hw_sectors and increasing it by a factor of 8. Fix this by only shifting sdkp->max_xfer_blocks. Cc: stable@vger.kernel.org Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
28072ad50c
commit
3a9794d329
@ -2800,9 +2800,11 @@ static int sd_revalidate_disk(struct gendisk *disk)
|
||||
*/
|
||||
sd_set_flush_flag(sdkp);
|
||||
|
||||
max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
|
||||
sdkp->max_xfer_blocks);
|
||||
max_xfer = sdkp->max_xfer_blocks;
|
||||
max_xfer <<= ilog2(sdp->sector_size) - 9;
|
||||
|
||||
max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
|
||||
max_xfer);
|
||||
blk_queue_max_hw_sectors(sdkp->disk->queue, max_xfer);
|
||||
set_capacity(disk, sdkp->capacity);
|
||||
sd_config_write_same(sdkp);
|
||||
|
Loading…
Reference in New Issue
Block a user