On Mon, Jul 31, 2017 at 10:15:12PM -0400, Colin Walters wrote: > On Mon, Jul 31, 2017, at 02:23 PM, Darrick J. Wong wrote: > > > I don't think F_SEAL_{SHRINK,GROW} prevents reflinking or CoW of file data, > > which are two things that cannot happen under S_IOMAP_IMMUTABLE that > > aren't size changes. From the implementation it looks like shrink and > > grow are only supposed to disallow changes to i_size, not i_blocks (or > > the file block map). > > True. > > > Then again, I suppose F_SEAL_* only work on shmem, so maybe it simply > > isn't defined for any other filesystem...? e.g. it doesn't prohibit > > reflink, but the only fs implementing seals doesn't support reflink. > > > > <shrug> > > > > Seals cannot be removed, which is too strict for the S_IOMAP_IMMUTABLE > > user cases being presented. > > To be clear, the set of use cases is swap files and DAX, right? Or is there anything else? I've outlined other use cases in previous discussions. To repeat myself, every so often we get someone with, say, a new high speed camera that want to dma the camera frames direct to the storage because they can't push 500,000 frames/s through the CPU to storage. Hence they want to bypass the OS and DMA the data direct to the storage. To do this they need a mechanism to freeze and unfreeze the block map of the file so that nothing modifies the block map while the camera hardware is dumping data direct to the storage. Immutable extent maps provide the functionality they need to implement this safely. There's also other similar use cases for RDMA targets on PMEM (regardless of whether DAX is enabled or not), and I've come across a couple of requests for mechanisms to allow fabric based nvme storage to do direct data transfers between storage devices, too. All of these use cases can be safely implemented if there is a mechanism to mark extent maps as immutable for the duration of the operation they need to perform. > I can't imagine why anyone would want to turn a swap file back into a regular file. > I haven't fully followed DAX, but I'd take your word for it if people want to > be able to remove the flag after. DAX isn't the driver of that functionality, it's the other use cases that need it, and why the proposed "only remove flag if len == 0" API is a non-starter.... Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx