Christoph, >> Some comments? Some requests for reworking? Some personal reasons to >> ignore my patches? > > I'm still completely opposed to the magic overloading using a flag. > That is just a bad design waiting for trouble to happen. The observation was that Kirill's original patch set was a line-for-line carbon copy of the write zeroes handling throughout the stack. The only difference between the two was at the bottom. Instead of duplicating all that code it seemed cleaner to use shared plumbing since these operations need to be split and merged exactly the same way in the block layer. Also, we already have REQ_NOUNMAP, not sure why an additional handling flag would lead to trouble? Note that I suggested renaming REQ_OP_WRITE_ZEROES to something else to separate the semantics from the plumbing. We need to be able to express: - zero & allocate block range (REQ_OP_WRITE_ZEROES, REQ_NOUNMAP) - zero & deallocate block range (REQ_OP_WRITE_ZEROES, !REQ_NOUNMAP) - allocate block range (?, don't care about zeroing) - deallocate block range (REQ_OP_DISCARD, don't care about zeroing) It just seems like a full-fledged REQ_OP_ALLOCATE is an overkill to fill that gap. That said, I do think that we have traditionally put emphasis on the wrong part of these operations. All we ever talk about wrt. discard and friends is the zeroing aspect. But I actually think that, semantically, the act of allocating and deallocating blocks is more important. And that zeroing is an optional second order effect of those operations. So if we could go back in time and nuke multi-range DSM TRIM/UNMAP, I would like to have REQ_OP_ALLOCATE/REQ_OP_DEALLOCATE with an optional REQ_ZERO flag. I think that would be cleaner. I have a much easier time wrapping my head around "allocate this block and zero it if you can" than "zero this block and do not deallocate it". But maybe that's just me. -- Martin K. Petersen Oracle Linux Engineering