On Thu, 2017-03-23 at 10:33 -0400, Christoph Hellwig wrote: > Try to use a write same with unmap bit variant if the device supports it > and the caller asks for it. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > drivers/scsi/sd.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index b6f70a09a301..ca96bb33471b 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -871,6 +871,16 @@ static int sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd) > return BLKPREP_INVALID; > return sd_setup_ata_trim_cmnd(cmd); > } > + > + if (rq->cmd_flags & REQ_UNMAP) { > + switch (sdkp->provisioning_mode) { > + case SD_LBP_WS16: > + return sd_setup_write_same16_cmnd(cmd, true); > + case SD_LBP_WS10: > + return sd_setup_write_same10_cmnd(cmd, true); > + } > + } > + > if (sdp->no_write_same) > return BLKPREP_INVALID; > if (sdkp->ws16 || sector > 0xffffffff || nr_sectors > 0xffff) Users can change the provisioning mode from user space from SD_LBP_WS16 into SD_LBP_WS10 so I'm not sure it's safe to skip the (sdkp->ws16 || sector > 0xffffffff || nr_sectors > 0xffff) check if REQ_UNMAP is set. Bart.