Thread (20 messages) 20 messages, 7 authors, 2017-08-21

Re: [PATCH v2 0/5] fs, xfs: block map immutable files for dax, dma-to-storage, and swap

From: Dan Williams <hidden>
Date: 2017-08-11 22:26:05
Also in: linux-fsdevel, linux-xfs, lkml, nvdimm

On Fri, Aug 11, 2017 at 3:44 AM, Christoph Hellwig [off-list ref] wrote:
On Sun, Aug 06, 2017 at 11:51:50AM -0700, Dan Williams wrote:
quoted
Of course it's a useful API. An application already needs to worry
about the block map, that's why we have fallocate, msync, fiemap
and...
Fallocate and msync do not expose the block map in any way.  Proof:
they work just fine over say nfs.
Right, but they let userspace make inferences about the state of
metadata relative to I/O to a given storage address. In this regard
S_IOMAP_IMMUTABLE is no different than MAP_SYNC, but 'immutable' goes
a step further to let an application infer that the storage address is
stable. This enables applications that MAP_SYNC does not, see below.
fiemap does indeed expose the block map, which is the whole point.
But it's a debug tool that we don't event have a man page for.  And
it's not usable for anything else, if only for the fact that it doesn't
tell you what device your returned extents are relative to.
True, one couldn't just use immutable + fiemap and expect to have the
right storage device.
quoted
quoted
We've been through this a few times but let me repeat it:  The only
sensible API gurantee is one that is observable and usable.
I'm missing how block-map immutable files violate this observable and
usable constraint?
What is the observable behavior of an extent map change?  How can you
describe your immutable extent map behavior so that when I violate
them by e.g. moving one extent to a different place on disk you can
observe that in userspace?
The violation is blocked, it's immutable. Using this feature means the
application is taking away some of the kernel's freedom. That is a
valid / safe tradeoff for the set of applications that would otherwise
resort to raw device access.
quoted
This immutable approach should also go in, it solves the same problem
without the the latency drawback,
How is your latency going to be any different from MAP_SYNC on
a fully allocated and pre-zeroed file?
So, I went back and read Jan's patches, and in the pre-allocated case
I don't think we can get stuck behind a backlog of dirty metada
flushing since the implementation only seems to take the synchronous
fault path if the fault dirtied the block map.
quoted
Beyond flush from userspace it also
can be used to solve the swapfile problems you highlighted
Which swapfile problem?
The TOCTOU problem of enabling swap vs reflink that you mentioned in
your criticism of the daxctl syscall, but now that I look your
comments were based on the *general* case use of bmap(), However, xfs
in particular as of commits:

   eb5e248d502b xfs: don't allow bmap on rt files
   db1327b16c2b xfs: report shared extent mappings to userspace correctly

...doesn't appear to have this problem. That said Dave's idea to use
immutable + unwritten extents for swap makes sense to me. That's a
feature, not a bug fix, but I went ahead and appended a
proof-of-concept implementation to the v3 posting.
quoted
and it
allows safe ongoing dma to a filesystem-dax mapping beyond what we can
already do with direct-I/O.
Please explain how this interface allows for any sort of safe userspace
DMA.
So this is where I continue to see S_IOMAP_IMMUTABLE being able to
support applications that MAP_SYNC does not. Dave mentioned userspace
pNFS4 servers, but there's also Samba and other protocols that want to
negotiate a direct path to pmem outside the kernel. Xen support has
thus far not been able to follow in the footsteps of KVM enabling due
to a dependence on static M2P tables that assume a static
guest-physical to host-physical relationship [1]. Immutable files
would allow Xen to follow the same "mmap a file" semantic as KVM.

Applications that just want flush from userspace can use MAP_SYNC,
those that need to temporarily pin the block for RDMA can use the
in-kernel pNFS server, and those that need to coordinate both from
userspace can use S_IOMAP_IMMUTABLE. It's a continuum, not a
competition.

[1]: https://lists.xen.org/archives/html/xen-devel/2017-04/msg00427.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help