On 07/03/2019 04:16 AM, Roman Bolshakov wrote: > WRITE SAME corrupts data on the block device behind iblock if the > command is emulated. The emulation code issues (M - 1) * N times more > bios than requested, where M is the number of 512 blocks per real block > size and N is the NUMBER OF LOGICAL BLOCKS specified in WRITE SAME > command. So, for a device with 4k blocks, 7 * N more LBAs gets written > after the requested range. > > The issue happens because the number of 512 byte sectors to be written > is decreased one by one while the real bios are typically from 1 to 8 > 512 byte sectors per bio. > > Fixes: c66ac9db8d4a ("[SCSI] target: Add LIO target core v4.0.0-rc6") > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Roman Bolshakov <r.bolshakov@xxxxxxxxx> > Reviewed-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > drivers/target/target_core_iblock.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c > index f4a075303e9a..6949ea8bc387 100644 > --- a/drivers/target/target_core_iblock.c > +++ b/drivers/target/target_core_iblock.c > @@ -502,7 +502,7 @@ iblock_execute_write_same(struct se_cmd *cmd) > > /* Always in 512 byte units for Linux/Block */ > block_lba += sg->length >> SECTOR_SHIFT; > - sectors -= 1; > + sectors -= sg->length >> SECTOR_SHIFT; > } > > iblock_submit_bios(&list); > Roman, The patch looks ok to me. Just one question. How did you hit this? Did you by any chance export this disk to a ESX initiator and was it doing WRITE SAME to zero out data. But, did the device being used by iblock not support the zero out command (was /sys/block/XYZ/queue/write_zeroes_max_bytes == 0)? Or, did you just send a WRITE SAME command manually using some tools like sg utils and it had a non zero'd buffer to write out? Or, was it some other use case?