On Sat, May 16, 2020 at 09:05:39PM +0800, Coly Li wrote: > On 2020/5/16 20:50, Christoph Hellwig wrote: > > On Sat, May 16, 2020 at 08:44:45PM +0800, Coly Li wrote: > >> Yes you are right, just like REQ_OP_DISCARD which does not transfer any > >> data but changes the data on device. If the request changes the stored > >> data, it does transfer data. > > > > REQ_OP_DISCARD is a special case, because most implementation end up > > transferring data, it just gets attached in the low-level driver. > > > > Yes, REQ_OP_ZONE_RESET and REQ_OP_ZONE_RESET_ALL are quite similar to > REQ_OP_DISCARD. Data read from the LBA range of reset zone is not > suggested and the content is undefined. > > For bcache, similar to REQ_OP_DISCARD, REQ_OP_ZONE_RESET and > REQ_OP_ZONE_RESET_ALL are handled in same way: If the backing device > supports discard/zone_reset, and the operation successes, then cached > data on SSD covered by the LBA range should be invalid, otherwise users > will read outdated and garbage data. > > We should treat REQ_OP_ZONE_RESET and REQ_OP_ZONE_RESET_ALL being in > WRITE direction. No, the difference is that the underlying SCSI/ATA/NVMe command tend to usually actually transfer data. Take a look at the special_vec field in struct request and the RQF_SPECIAL_PAYLOAD flag.