On Thu, 2017-05-04 at 15:50 -0700, Bart Van Assche wrote: > For VERIFY and WRITE AND VERIFY commands the size of the SCSI > Data-Out buffer can differ from the size of the data area on > the storage medium that is affected by the command. Make sure > that the Data-Out buffer size is computed correctly. Apparently > this part got dropped from my previous VERIFY / WRITE AND VERIFY > patch before I posted it due to rebasing. > > Fixes: commit 0e2eb7d12eaa ("target: Fix VERIFY and WRITE VERIFY command parsing") > Signed-off-by: Bart Van Assche <bart.vanassche@xxxxxxxxxxx> > Cc: Hannes Reinecke <hare@xxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Andy Grover <agrover@xxxxxxxxxx> > Cc: David Disseldorp <ddiss@xxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > --- > drivers/target/target_core_sbc.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c > index a0ad618f1b1a..51489d96cb31 100644 > --- a/drivers/target/target_core_sbc.c > +++ b/drivers/target/target_core_sbc.c > @@ -888,9 +888,10 @@ static sense_reason_t sbc_parse_verify(struct se_cmd *cmd, int *sectors, > sense_reason_t > sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops) > { > + enum { INVALID_SIZE = 1 }; > struct se_device *dev = cmd->se_dev; > unsigned char *cdb = cmd->t_task_cdb; > - unsigned int size; > + unsigned int size = INVALID_SIZE; > u32 sectors = 0; > sense_reason_t ret; > > @@ -1212,7 +1213,7 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops) > return TCM_ADDRESS_OUT_OF_RANGE; > } > > - if (!(cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE)) > + if (size == INVALID_SIZE) > size = sbc_get_size(cmd, sectors); > } > This patch has no effect. All it does for VERIFY + WRITE_AND_VERIFY is prevent sbc_get_size() from being called twice with the same parameters, because your previous patch in for-next was incorrectly only doing it for only bytchk = 1. Anyways, sbc_parse_verify() should not being doing this directly, and not for only bytchk = 1. Anyways, I've fixed both cases and will post the proper fix inline against patch #19.