scsi: sd: Revert "scsi: sd: Remove a local variable"
This reverts commit84f7a9de06
. Because it introduces a problem that rq->__data_len is set to the wrong value. before the patch: 1) nr_bytes = rq->__data_len 2) rq->__data_len = sdp->sector_size 3) scsi_init_io() 4) rq->__data_len = nr_bytes after the patch: 1) rq->__data_len = sdp->sector_size 2) scsi_init_io() 3) rq->__data_len = rq->__data_len -> __data_len is wrong It will cause that io can only complete one segment each time, and the io will requeue in scsi_io_completion_action(), which will cause severe performance degradation. Scsi write same is removed in commite383e16e84
("scsi: sd: Remove WRITE_SAME support") from mainline, hence this patch is only needed for stable kernels. Fixes:84f7a9de06
("scsi: sd: Remove a local variable") Signed-off-by: Yu Kuai <yukuai3@huawei.com> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
52c2329147
Коммит
aad798a0b3
|
@ -1072,6 +1072,7 @@ static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
|
||||||
struct bio *bio = rq->bio;
|
struct bio *bio = rq->bio;
|
||||||
u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
|
u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
|
||||||
u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
|
u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
|
||||||
|
unsigned int nr_bytes = blk_rq_bytes(rq);
|
||||||
blk_status_t ret;
|
blk_status_t ret;
|
||||||
|
|
||||||
if (sdkp->device->no_write_same)
|
if (sdkp->device->no_write_same)
|
||||||
|
@ -1108,7 +1109,7 @@ static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
|
||||||
*/
|
*/
|
||||||
rq->__data_len = sdp->sector_size;
|
rq->__data_len = sdp->sector_size;
|
||||||
ret = scsi_alloc_sgtables(cmd);
|
ret = scsi_alloc_sgtables(cmd);
|
||||||
rq->__data_len = blk_rq_bytes(rq);
|
rq->__data_len = nr_bytes;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче