On Tue, 2012-02-14 at 15:30 -0800, Roland Dreier wrote: > From: Roland Dreier <roland@xxxxxxxxxxxxxxx> > > If the target core signals an over- or under-run, tcm_loop should call > scsi_set_resid() to tell the SCSI midlayer about the residual data length. > > The difference can be seen by doing something like > > strace -eioctl sg_raw -r 1024 /dev/sda 8 0 0 0 1 0 > /dev/null > > and looking at the "resid=" part of the SG_IO ioctl -- after this patch, > the field is correctly reported as 512. > > Signed-off-by: Roland Dreier <roland@xxxxxxxxxxxxxxx> > --- > drivers/target/loopback/tcm_loop.c | 6 ++++++ > 1 files changed, 6 insertions(+), 0 deletions(-) > > diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c > index 9ff6684..97f51df 100644 > --- a/drivers/target/loopback/tcm_loop.c > +++ b/drivers/target/loopback/tcm_loop.c > @@ -830,6 +830,9 @@ static int tcm_loop_queue_data_in(struct se_cmd *se_cmd) > > sc->result = SAM_STAT_GOOD; > set_host_byte(sc, DID_OK); > + if ((se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) || > + (se_cmd->se_cmd_flags & SCF_UNDERFLOW_BIT)) > + scsi_set_resid(sc, se_cmd->residual_count); > sc->scsi_done(sc); > return 0; > } > @@ -855,6 +858,9 @@ static int tcm_loop_queue_status(struct se_cmd *se_cmd) > sc->result = se_cmd->scsi_status; > > set_host_byte(sc, DID_OK); > + if ((se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) || > + (se_cmd->se_cmd_flags & SCF_UNDERFLOW_BIT)) > + scsi_set_resid(sc, se_cmd->residual_count); > sc->scsi_done(sc); > return 0; > } Applied to lio-core, and will get this queued for a 3.3-rc-fixes pull request. Thanks Roland! --nab -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html