On Thu, Apr 10, 2025 at 09:15:59AM +0200, Christoph Hellwig wrote: > On Thu, Apr 10, 2025 at 11:52:17AM +0800, Zhang Yi wrote: > > > > Thank you for your review and comments. However, I'm not sure I fully > > understand your points. Could you please provide more details? > > > > AFAIK, the NVMe protocol has the following description in the latest > > NVM Command Set Specification Figure 82 and Figure 114: > > > > === > > Deallocate (DEAC): If this bit is set to `1´, then the host is > > requesting that the controller deallocate the specified logical blocks. > > If this bit is cleared to `0´, then the host is not requesting that > > the controller deallocate the specified logical blocks... > > > > DLFEAT: > > Write Zeroes Deallocation Support (WZDS): If this bit is set to `1´, > > then the controller supports the Deallocate bit in the Write Zeroes > > command for this namespace... > > Yes. The host is requesting, not the controller shall. It's not > guaranteed behavior and the controller might as well actually write > zeroes to the media. That is rather stupid, but still.
I guess some controllers _really_ want specific alignments to successfully do a proper discard. While still not guaranteed in spec, I think it is safe to assume a proper deallocation will occur if you align to NPDA and NPDG. Otherwise, the controller may do a read-modify-write to ensure zeroes are returned for the requested LBA range on anything that straddles an implementation specific boundary.