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

Jan Kara
2020-04-01T10:25:17Z

On Wed 01-04-20 04:00:21, Darrick J. Wong wrote:
> 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.

I generally like the proposal but I think the fact that toggling
FS_XFLAG_DAX will not have immediate effect on S_DAX will cause quite some
confusion and ultimately bug reports. I'm thinking whether we could somehow
improve this... For example an ioctl that would try to make set inode flags
effective by evicting the inode (and returning EBUSY if the eviction is
impossible for some reason)?

Honza

>
> 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
--
Jan Kara <jack@suse.com>
SUSE Labs, CR