Re: [PATCH V5 00/12] Enable per-file/per-directory DAX operations V5

Darrick J. Wong
2020-04-01T04:00:45Z

On Mon, Mar 16, 2020 at 10:55:09AM +0100, Christoph Hellwig wrote:
> On Mon, Mar 16, 2020 at 10:52:24AM +0100, Jan Kara wrote:
> > > This sounds reasonable to me.
> > >
> > > As for deprecating the mount option, I think at a minimum it needs to
> > > continue be accepted as an option even if it is ignored to not break
> > > existing setups.
> >
> > Agreed. But that's how we usually deprecate mount options. Also I'd say
> > that statx() support for reporting DAX state and some education of
> > programmers using DAX is required before we deprecate the mount option
> > since currently applications check 'dax' mount option to determine how much
> > memory they need to set aside for page cache before they consume everything
> > else on the machine...
>
> I don't even think we should deprecate it. It isn't painful to maintain
> and actually useful for testing. Instead we should expand it into a
> tristate:
>
> dax=off
> dax=flag
> dax=always
>
> where the existing "dax" option maps to "dax=always" and nodax maps
> to "dax=off". and dax=flag becomes the default for DAX capable devices.

That works for me. In summary:

- Applications must call statx to discover the current S_DAX state.

- There exists an advisory file inode flag FS_XFLAG_DAX that can be
changed on files that have no blocks allocated to them. Changing
this flag does not necessarily change the S_DAX state immediately
but programs can query the S_DAX state via statx.

If FS_XFLAG_DAX is set and the fs is on pmem then it will always
enable S_DAX at inode load time; if FS_XFLAG_DAX is not set, it will
never enable S_DAX. Unless overridden...

- There exists a dax= mount option. dax=off means "never set S_DAX,
ignore FS_XFLAG_DAX"; dax=always means "always set S_DAX (at least on
pmem), ignore FS_XFLAG_DAX"; and dax=iflag means "follow FS_XFLAG_DAX"
and is the default. "dax" by itself means "dax=always". "nodax"
means "dax=off".

- There exists an advisory directory inode flag FS_XFLAG_DAX that can
be changed at any time. The flag state is copied into any files or
subdirectories created within that directory. If programs require
that file access runs in S_DAX mode, they'll have to create those
files themselves inside a directory with FS_XFLAG_DAX set, or mount
the fs with dax=always.

Ok? Let's please get this part finished for 5.8, then we can get back
to arguing about fs-rmap and reflink and dax and whatnot.

--D