LKML Archive on lore.kernel.org
 help / color / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: ira.weiny@intel.com
Cc: linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org,
	Al Viro <viro@zeniv.linux.org.uk>, Jan Kara <jack@suse.cz>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Chinner <david@fromorbit.com>,
	Christoph Hellwig <hch@lst.de>,
	"Theodore Y. Ts'o" <tytso@mit.edu>,
	Jeff Moyer <jmoyer@redhat.com>,
	linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-api@vger.kernel.org
Subject: Re: [PATCH V11 04/11] Documentation/dax: Update Usage section
Date: Tue, 28 Apr 2020 13:27:38 -0700
Message-ID: <20200428202738.GE6742@magnolia> (raw)
In-Reply-To: <20200428002142.404144-5-ira.weiny@intel.com>

On Mon, Apr 27, 2020 at 05:21:35PM -0700, ira.weiny@intel.com wrote:
> From: Ira Weiny <ira.weiny@intel.com>
> 
> Update the Usage section to reflect the new individual dax selection
> functionality.
> 
> Signed-off-by: Ira Weiny <ira.weiny@intel.com>
> 
> ---
> Changes from V10:
> 	Clarifications from Dave
> 	Add '-c' to xfs_io examples
> 
> Changes from V9:
> 	Fix missing ')'
> 	Fix trialing '"'
> 
> Changes from V8:
> 	Updates from Darrick
> 
> Changes from V7:
> 	Cleanups/clarifications from Darrick and Dan
> 
> Changes from V6:
> 	Update to allow setting FS_XFLAG_DAX any time.
> 	Update with list of behaviors from Darrick
> 	https://lore.kernel.org/lkml/20200409165927.GD6741@magnolia/
> 
> Changes from V5:
> 	Update to reflect the agreed upon semantics
> 	https://lore.kernel.org/lkml/20200405061945.GA94792@iweiny-DESK2.sc.intel.com/
> ---
>  Documentation/filesystems/dax.txt | 139 +++++++++++++++++++++++++++++-
>  1 file changed, 136 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/filesystems/dax.txt b/Documentation/filesystems/dax.txt
> index 679729442fd2..409e4e83e46a 100644
> --- a/Documentation/filesystems/dax.txt
> +++ b/Documentation/filesystems/dax.txt
> @@ -17,11 +17,144 @@ For file mappings, the storage device is mapped directly into userspace.
>  Usage
>  -----
>  
> -If you have a block device which supports DAX, you can make a filesystem
> +If you have a block device which supports DAX, you can make a file system
>  on it as usual.  The DAX code currently only supports files with a block
>  size equal to your kernel's PAGE_SIZE, so you may need to specify a block
> -size when creating the filesystem.  When mounting it, use the "-o dax"
> -option on the command line or add 'dax' to the options in /etc/fstab.
> +size when creating the file system.
> +
> +Currently 3 filesystems support DAX: ext2, ext4 and xfs.  Enabling DAX on them
> +is different.
> +
> +Enabling DAX on ext4 and ext2
> +-----------------------------
> +
> +When mounting the filesystem, use the "-o dax" option on the command line or
> +add 'dax' to the options in /etc/fstab.  This works to enable DAX on all files
> +within the filesystem.  It is equivalent to the '-o dax=always' behavior below.
> +
> +
> +Enabling DAX on xfs
> +-------------------
> +
> +Summary
> +-------
> +
> + 1. There exists an in-kernel file access mode flag S_DAX that corresponds to
> +    the statx flag STATX_ATTR_DAX.  See the manpage for statx(2) for details
> +    about this access mode.
> +
> + 2. There exists a persistent flag FS_XFLAG_DAX that can be applied to regular
> +    files and directories. This advisory flag can be set or cleared at any
> +    time, but doing so does not immediately affect the S_DAX state.
> +
> + 3. If the persistent FS_XFLAG_DAX flag is set on a directory, this flag will
> +    be inherited by all regular files and sub directories that are subsequently

Well, I'm at the level of minor edits: "...and subdirectories that..."

> +    created in this directory. Files and subdirectories that exist at the time
> +    this flag is set or cleared on the parent directory are not modified by
> +    this modification of the parent directory.
> +
> + 4. There exists dax mount options which can override FS_XFLAG_DAX in the
> +    setting of the S_DAX flag.  Given underlying storage which supports DAX the
> +    following hold.

"hold:"

> +
> +    "-o dax=inode"  means "follow FS_XFLAG_DAX" and is the default.
> +
> +    "-o dax=never"  means "never set S_DAX, ignore FS_XFLAG_DAX."
> +
> +    "-o dax=always" means "always set S_DAX ignore FS_XFLAG_DAX."
> +
> +    "-o dax"        is a legacy option which is an alias for "dax=always".
> +		    This may be removed in the future so "-o dax=always" is
> +		    the preferred method for specifying this behavior.
> +
> +    NOTE: Setting and inheritance affect FS_XFLAG_DAX at all times even when
> +    the file system is mounted with a dax option.

We can also clear the flag at any time no matter the mount option state.
Perhaps:

"NOTE: Modifications to and inheritance behavior of FS_XFLAG_DAX remain
the same even when the filesystem is mounted with a dax option."

> +    However, in-core inode state
> +    (S_DAX) will be overridden until the file system is remounted with
> +    dax=inode and the inode is evicted from kernel memory.
> +
> + 5. The DAX policy can be changed via:

"The S_DAX policy".  I don't want people to get confused.

> +
> +    a) Set the parent directory FS_XFLAG_DAX as needed before files are created
> +
> +    b) Set the appropriate dax="foo" mount option
> +
> +    c) Change the FS_XFLAG_DAX on existing regular files and directories. This
> +       has runtime constraints and limitations that are described in 6) below.

"Setting", and "Changing" at the front of these three bullet points?

Were you to put these together as full sentences, you'd want them to
read "The DAX policy can be changed via setting the parent directory
FS_XFLAG_DAX..."

> +
> + 6. When changing the DAX policy via toggling the persistent FS_XFLAG_DAX flag,

"When changing the S_DAX policy..."

> +    the change in behaviour for existing regular files may not occur
> +    immediately.  If the change must take effect immediately, the administrator
> +    needs to:
> +
> +    a) stop the application so there are no active references to the data set
> +       the policy change will affect
> +
> +    b) evict the data set from kernel caches so it will be re-instantiated when
> +       the application is restarted. This can be acheived by:

"achieved"

> +
> +       i. drop-caches
> +       ii. a filesystem unmount and mount cycle
> +       iii. a system reboot
> +
> +
> +Details
> +-------
> +
> +There are 2 per-file dax flags.  One is a persistent inode setting (FS_XFLAG_DAX)
> +and the other is a volatile flag indicating the active state of the feature
> +(S_DAX).
> +
> +FS_XFLAG_DAX is preserved within the file system.  This persistent config
> +setting can be set, cleared and/or queried using the FS_IOC_FS[GS]ETXATTR ioctl
> +(see ioctl_xfs_fsgetxattr(2)) or an utility such as 'xfs_io'.
> +
> +New files and directories automatically inherit FS_XFLAG_DAX from
> +their parent directory _when_ _created_.  Therefore, setting FS_XFLAG_DAX at
> +directory creation time can be used to set a default behavior for an entire
> +sub-tree.
> +
> +To clarify inheritance here are 3 examples:

"...inheritance, here are..."

> +
> +Example A:
> +
> +mkdir -p a/b/c
> +xfs_io -c 'chattr +x' a
> +mkdir a/b/c/d
> +mkdir a/e
> +
> +	dax: a,e
> +	no dax: b,c,d
> +
> +Example B:
> +
> +mkdir a
> +xfs_io -c 'chattr +x' a
> +mkdir -p a/b/c/d
> +
> +	dax: a,b,c,d
> +	no dax:
> +
> +Example C:
> +
> +mkdir -p a/b/c
> +xfs_io -c 'chattr +x' c
> +mkdir a/b/c/d
> +
> +	dax: c,d
> +	no dax: a,b
> +
> +
> +The current enabled state (S_DAX) is set when a file inode is instantiated in
> +memory by the kernel.  It is set based on the underlying media support, the
> +value of FS_XFLAG_DAX and the file systems dax mount option setting.

"...and the file system's dax mount option string."

> +
> +statx can be used to query S_DAX.  NOTE that a directory will never have S_DAX

"Note that only regular files will ever have S_DAX set..."?

--D

> +set and therefore statx will never indicate that S_DAX is set on directories.
> +
> +Setting the FS_XFLAG_DAX (specifically or through inheritance) occurs even if
> +the underlying media does not support dax and/or the file system is overridden
> +with a mount option.
> +
>  
>  
>  Implementation Tips for Block Driver Writers
> -- 
> 2.25.1
> 

  reply index

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-28  0:21 [PATCH V11 00/11] XFS - Enable per-file/per-directory DAX operations V11 ira.weiny
2020-04-28  0:21 ` [PATCH V11 01/11] fs/xfs: Remove unnecessary initialization of i_rwsem ira.weiny
2020-04-28  0:21 ` [PATCH V11 02/11] fs: Remove unneeded IS_DAX() check in io_is_direct() ira.weiny
2020-04-28  0:21 ` [PATCH V11 03/11] fs/stat: Define DAX statx attribute ira.weiny
2020-04-28  0:21 ` [PATCH V11 04/11] Documentation/dax: Update Usage section ira.weiny
2020-04-28 20:27   ` Darrick J. Wong [this message]
2020-04-28 20:53     ` Ira Weiny
2020-04-28 21:12       ` Darrick J. Wong
2020-04-28 22:21   ` [PATCH V11.1] " ira.weiny
2020-04-29  2:21     ` Randy Dunlap
2020-04-29  4:30       ` Ira Weiny
2020-04-29  4:33     ` [PATCH V11.2] " ira.weiny
2020-04-29  5:47       ` Randy Dunlap
2020-04-28  0:21 ` [PATCH V11 05/11] fs/xfs: Change XFS_MOUNT_DAX to XFS_MOUNT_DAX_ALWAYS ira.weiny
2020-04-28  0:21 ` [PATCH V11 06/11] fs/xfs: Make DAX mount option a tri-state ira.weiny
2020-04-28 20:08   ` Darrick J. Wong
2020-04-28  0:21 ` [PATCH V11 07/11] fs/xfs: Create function xfs_inode_should_enable_dax() ira.weiny
2020-04-28  0:21 ` [PATCH V11 08/11] fs/xfs: Combine xfs_diflags_to_linux() and xfs_diflags_to_iflags() ira.weiny
2020-04-28  0:21 ` [PATCH V11 09/11] fs: Lift XFS_IDONTCACHE to the VFS layer ira.weiny
2020-04-28 20:06   ` Darrick J. Wong
2020-04-28  0:21 ` [PATCH V11 10/11] fs: Introduce DCACHE_DONTCACHE ira.weiny
2020-04-28 13:04   ` Jan Kara
2020-04-28 20:09   ` Darrick J. Wong
2020-04-28  0:21 ` [PATCH V11 11/11] fs/xfs: Update xfs_ioctl_setattr_dax_invalidate() ira.weiny
2020-04-28 20:11   ` Darrick J. Wong
2020-06-02 17:23     ` Darrick J. Wong
2020-06-02 23:15       ` Ira Weiny
2020-06-03 10:10       ` Jan Kara
2020-06-03 17:03         ` Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200428202738.GE6742@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=dan.j.williams@intel.com \
    --cc=david@fromorbit.com \
    --cc=hch@lst.de \
    --cc=ira.weiny@intel.com \
    --cc=jack@suse.cz \
    --cc=jmoyer@redhat.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git
	git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git
	git clone --mirror https://lore.kernel.org/lkml/9 lkml/git/9.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org
	public-inbox-index lkml

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git