On Fri, Dec 5, 2014 at 9:58 PM, Martin K. Petersen <martin.petersen@xxxxxxxxxx> wrote: >>>>>> "Ming" == Ming Lei <ming.lei@xxxxxxxxxxxxx> writes: > >>> What about in READ CAPACITY(16)? > > Ming> It isn't set too. > > Please try the following patch: > > > [SCSI] sd: Tweak discard heuristics to work around QEMU SCSI issue > > 7985090aa020 changed the discard heuristics to give preference to the > WRITE SAME commands that (unlike UNMAP) guarantee deterministic results. > > Ming Lei discovered that QEMU SCSI's WRITE SAME implementation > internally relied on limits that were only communicated for the UNMAP I just found it should be one QEMU bug for emulating write same, but limiting write same sectors number as max_unmap_blocks can workaround the issue. > case. And therefore discard commands backed by WRITE SAME would fail. > > Tweak the heuristics so we still pick UNMAP in the LBPRZ=0 case and only > prefer the WRITE SAME variants if the device has the LBPRZ flag set. > > Reported-by: Ming Lei <ming.lei@xxxxxxxxxxxxx> > Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx> > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index 95bfb7bfbb9d..76c5d1388417 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -2623,8 +2623,9 @@ static void sd_read_block_limits(struct scsi_disk *sdkp) > sd_config_discard(sdkp, SD_LBP_WS16); > > } else { /* LBP VPD page tells us what to use */ > - > - if (sdkp->lbpws) > + if (sdkp->lbpu && sdkp->max_unmap_blocks && !sdkp->lbprz) > + sd_config_discard(sdkp, SD_LBP_UNMAP); > + else if (sdkp->lbpws) > sd_config_discard(sdkp, SD_LBP_WS16); > else if (sdkp->lbpws10) > sd_config_discard(sdkp, SD_LBP_WS10); Looks it does work. Thanks, Ming Lei -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html