scsi: sd: define variable dif as unsigned int instead of bool
Variable dif in function sd_setup_read_write_cmnd() is the return value of
function scsi_host_dif_capable() which returns dif capability of disks. If
define it as bool, even for the disks which support DIF3, the function
still return dif=1, which causes IO error. So define variable dif as
unsigned int instead of bool.
Fixes: e249e42d27
("scsi: sd: Clean up sd_setup_read_write_cmnd()")
Link: https://lore.kernel.org/r/1571725628-132736-1-git-send-email-chenxiang66@hisilicon.com
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
fc5b220b2d
commit
0cf9f4e547
|
@ -1166,11 +1166,12 @@ static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
|
||||||
sector_t lba = sectors_to_logical(sdp, blk_rq_pos(rq));
|
sector_t lba = sectors_to_logical(sdp, blk_rq_pos(rq));
|
||||||
sector_t threshold;
|
sector_t threshold;
|
||||||
unsigned int nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
|
unsigned int nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
|
||||||
bool dif, dix;
|
|
||||||
unsigned int mask = logical_to_sectors(sdp, 1) - 1;
|
unsigned int mask = logical_to_sectors(sdp, 1) - 1;
|
||||||
bool write = rq_data_dir(rq) == WRITE;
|
bool write = rq_data_dir(rq) == WRITE;
|
||||||
unsigned char protect, fua;
|
unsigned char protect, fua;
|
||||||
blk_status_t ret;
|
blk_status_t ret;
|
||||||
|
unsigned int dif;
|
||||||
|
bool dix;
|
||||||
|
|
||||||
ret = scsi_init_io(cmd);
|
ret = scsi_init_io(cmd);
|
||||||
if (ret != BLK_STS_OK)
|
if (ret != BLK_STS_OK)
|
||||||
|
|
Loading…
Reference in New Issue