From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-nvdimm@lists.01.org, Theodore Ts'o <tytso@mit.edu>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-xfs@vger.kernel.org,
Matthew Wilcox <mawilcox@microsoft.com>,
Ross Zwisler <ross.zwisler@linux.intel.com>,
stable@vger.kernel.org, Jan Kara <jack@suse.cz>,
hch@lst.de, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 02/12] dax: introduce IS_DEVDAX() and IS_FSDAX()
Date: Fri, 2 Mar 2018 09:45:30 -0800 [thread overview]
Message-ID: <20180302174530.GV19312@magnolia> (raw)
In-Reply-To: <151996282448.28483.10415125852182473579.stgit@dwillia2-desk3.amr.corp.intel.com>
On Thu, Mar 01, 2018 at 07:53:44PM -0800, Dan Williams wrote:
> The current IS_DAX() helper that checks if a file is in DAX mode serves
> two purposes. It is a control flow branch condition for DAX vs
> non-DAX paths and it is a mechanism to perform dead code elimination. The
> dead code elimination is required in the CONFIG_FS_DAX=n case since
> there are symbols in fs/dax.c that will be elided. While the
> dead code elimination can be addressed with nop stubs for the fs/dax.c
> symbols that does not address the need for a DAX control flow helper
> where fs/dax.c symbols are not involved.
>
> Moreover, the control flow changes, in some cases, need to be cognizant
> of whether the DAX file is a typical file or a Device-DAX special file.
> Introduce IS_DEVDAX() and IS_FSDAX() to simultaneously address the
> file-type control flow and dead-code elimination use cases. IS_DAX()
> will be deleted after all sites are converted to use the file-type
> specific helper.
>
> Note, this change is also a pre-requisite for fixing the definition of
> the S_DAX inode flag in the CONFIG_FS_DAX=n + CONFIG_DEV_DAX=y case.
> The flag needs to be defined, non-zero, if either DAX facility is
> enabled.
>
> Cc: "Theodore Ts'o" <tytso@mit.edu>
> Cc: Andreas Dilger <adilger.kernel@dilger.ca>
> Cc: Alexander Viro <viro@zeniv.linux.org.uk>
> Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
> Cc: linux-xfs@vger.kernel.org
> Cc: Matthew Wilcox <mawilcox@microsoft.com>
> Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
> Cc: <stable@vger.kernel.org>
> Fixes: dee410792419 ("/dev/dax, core: file operations and dax-mmap")
> Reported-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Jan Kara <jack@suse.cz>
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
> include/linux/fs.h | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 79c413985305..bd0c46880572 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1909,6 +1909,28 @@ static inline bool sb_rdonly(const struct super_block *sb) { return sb->s_flags
> #define IS_WHITEOUT(inode) (S_ISCHR(inode->i_mode) && \
> (inode)->i_rdev == WHITEOUT_DEV)
>
> +static inline bool IS_DEVDAX(struct inode *inode)
> +{
> + if (!IS_ENABLED(CONFIG_DEV_DAX))
> + return false;
> + if ((inode->i_flags & S_DAX) == 0)
> + return false;
> + if (!S_ISCHR(inode->i_mode))
> + return false;
> + return true;
> +}
> +
> +static inline bool IS_FSDAX(struct inode *inode)
> +{
> + if (!IS_ENABLED(CONFIG_FS_DAX))
> + return false;
I echo Jan's complaint from the last round that the dead code
elimination here is subtle, as compared to:
#if IS_ENABLED(CONFIG_FS_DAX)
static inline bool IS_FSDAX(struct inode *inode) { ... }
#else
# define IS_FSDAX(inode) (false)
#endif
But I guess even with that we're relying on dead code elimination higher
up in the call stack...
> + if ((inode->i_flags & S_DAX) == 0)
> + return false;
> + if (S_ISCHR(inode->i_mode))
> + return false;
I'm curious, do we have character devices with S_DAX set?
I /think/ we're expecting that only block/char devices and files will
ever have S_DAX set, so IS_FSDAX is only true for block devices and
files. Right?
(A comment here about why S_ISCHR->false here would be helpful.)
--D
> + return true;
> +}
> +
> static inline bool HAS_UNMAPPED_ID(struct inode *inode)
> {
> return !uid_valid(inode->i_uid) || !gid_valid(inode->i_gid);
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-nvdimm@lists.01.org, Theodore Ts'o <tytso@mit.edu>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-xfs@vger.kernel.org,
Matthew Wilcox <mawilcox@microsoft.com>,
Ross Zwisler <ross.zwisler@linux.intel.com>,
stable@vger.kernel.org, Jan Kara <jack@suse.cz>,
hch@lst.de, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 02/12] dax: introduce IS_DEVDAX() and IS_FSDAX()
Date: Fri, 2 Mar 2018 09:45:30 -0800 [thread overview]
Message-ID: <20180302174530.GV19312@magnolia> (raw)
In-Reply-To: <151996282448.28483.10415125852182473579.stgit@dwillia2-desk3.amr.corp.intel.com>
On Thu, Mar 01, 2018 at 07:53:44PM -0800, Dan Williams wrote:
> The current IS_DAX() helper that checks if a file is in DAX mode serves
> two purposes. It is a control flow branch condition for DAX vs
> non-DAX paths and it is a mechanism to perform dead code elimination. The
> dead code elimination is required in the CONFIG_FS_DAX=n case since
> there are symbols in fs/dax.c that will be elided. While the
> dead code elimination can be addressed with nop stubs for the fs/dax.c
> symbols that does not address the need for a DAX control flow helper
> where fs/dax.c symbols are not involved.
>
> Moreover, the control flow changes, in some cases, need to be cognizant
> of whether the DAX file is a typical file or a Device-DAX special file.
> Introduce IS_DEVDAX() and IS_FSDAX() to simultaneously address the
> file-type control flow and dead-code elimination use cases. IS_DAX()
> will be deleted after all sites are converted to use the file-type
> specific helper.
>
> Note, this change is also a pre-requisite for fixing the definition of
> the S_DAX inode flag in the CONFIG_FS_DAX=n + CONFIG_DEV_DAX=y case.
> The flag needs to be defined, non-zero, if either DAX facility is
> enabled.
>
> Cc: "Theodore Ts'o" <tytso@mit.edu>
> Cc: Andreas Dilger <adilger.kernel@dilger.ca>
> Cc: Alexander Viro <viro@zeniv.linux.org.uk>
> Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
> Cc: linux-xfs@vger.kernel.org
> Cc: Matthew Wilcox <mawilcox@microsoft.com>
> Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
> Cc: <stable@vger.kernel.org>
> Fixes: dee410792419 ("/dev/dax, core: file operations and dax-mmap")
> Reported-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Jan Kara <jack@suse.cz>
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
> include/linux/fs.h | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 79c413985305..bd0c46880572 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1909,6 +1909,28 @@ static inline bool sb_rdonly(const struct super_block *sb) { return sb->s_flags
> #define IS_WHITEOUT(inode) (S_ISCHR(inode->i_mode) && \
> (inode)->i_rdev == WHITEOUT_DEV)
>
> +static inline bool IS_DEVDAX(struct inode *inode)
> +{
> + if (!IS_ENABLED(CONFIG_DEV_DAX))
> + return false;
> + if ((inode->i_flags & S_DAX) == 0)
> + return false;
> + if (!S_ISCHR(inode->i_mode))
> + return false;
> + return true;
> +}
> +
> +static inline bool IS_FSDAX(struct inode *inode)
> +{
> + if (!IS_ENABLED(CONFIG_FS_DAX))
> + return false;
I echo Jan's complaint from the last round that the dead code
elimination here is subtle, as compared to:
#if IS_ENABLED(CONFIG_FS_DAX)
static inline bool IS_FSDAX(struct inode *inode) { ... }
#else
# define IS_FSDAX(inode) (false)
#endif
But I guess even with that we're relying on dead code elimination higher
up in the call stack...
> + if ((inode->i_flags & S_DAX) == 0)
> + return false;
> + if (S_ISCHR(inode->i_mode))
> + return false;
I'm curious, do we have character devices with S_DAX set?
I /think/ we're expecting that only block/char devices and files will
ever have S_DAX set, so IS_FSDAX is only true for block devices and
files. Right?
(A comment here about why S_ISCHR->false here would be helpful.)
--D
> + return true;
> +}
> +
> static inline bool HAS_UNMAPPED_ID(struct inode *inode)
> {
> return !uid_valid(inode->i_uid) || !gid_valid(inode->i_gid);
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-03-02 17:45 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-02 3:53 [PATCH v5 00/12] vfio, dax: prevent long term filesystem-dax pins and other fixes Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` [PATCH v5 01/12] dax: fix vma_is_fsdax() helper Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 22:52 ` Christoph Hellwig
2018-03-02 22:52 ` Christoph Hellwig
2018-03-02 22:52 ` Christoph Hellwig
2018-03-02 3:53 ` [PATCH v5 02/12] dax: introduce IS_DEVDAX() and IS_FSDAX() Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 17:45 ` Darrick J. Wong [this message]
2018-03-02 17:45 ` Darrick J. Wong
2018-03-02 18:37 ` Dan Williams
2018-03-02 18:37 ` Dan Williams
2018-03-02 18:37 ` Dan Williams
2018-03-02 19:06 ` [PATCH v6] " Dan Williams
2018-03-02 19:06 ` Dan Williams
2018-03-02 19:06 ` Dan Williams
2018-03-02 19:06 ` Dan Williams
2018-03-02 19:06 ` Dan Williams
2018-03-02 19:58 ` Darrick J. Wong
2018-03-02 19:58 ` Darrick J. Wong
2018-03-02 22:53 ` [PATCH v5 02/12] " Christoph Hellwig
2018-03-02 22:53 ` Christoph Hellwig
2018-03-02 22:53 ` Christoph Hellwig
2018-03-02 3:53 ` [PATCH v5 03/12] ext2, dax: finish implementing dax_sem helpers Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` [PATCH v5 04/12] ext2, dax: define ext2_dax_*() infrastructure in all cases Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:53 ` Dan Williams
2018-03-02 3:54 ` [PATCH v5 05/12] ext4, dax: define ext4_dax_*() " Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` [PATCH v5 06/12] ext2, dax: replace IS_DAX() with IS_FSDAX() Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` [PATCH v5 07/12] ext4, " Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` [PATCH v5 08/12] xfs, " Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 17:46 ` Darrick J. Wong
2018-03-02 17:46 ` Darrick J. Wong
2018-03-02 3:54 ` [PATCH v5 09/12] mm, dax: replace IS_DAX() with IS_DEVDAX() or IS_FSDAX() Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 22:54 ` Christoph Hellwig
2018-03-02 22:54 ` Christoph Hellwig
2018-03-02 3:54 ` [PATCH v5 10/12] fs, dax: kill IS_DAX() Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` [PATCH v5 11/12] dax: fix S_DAX definition Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` [PATCH v5 12/12] vfio: disable filesystem-dax page pinning Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 3:54 ` Dan Williams
2018-03-02 22:10 ` [PATCH v5 00/12] vfio, dax: prevent long term filesystem-dax pins and other fixes Christoph Hellwig
2018-03-02 22:10 ` Christoph Hellwig
2018-03-02 22:10 ` Christoph Hellwig
2018-03-02 22:21 ` Dan Williams
2018-03-02 22:21 ` Dan Williams
2018-03-02 22:21 ` Dan Williams
2018-03-02 22:21 ` Dan Williams
2018-03-02 22:57 ` Christoph Hellwig
2018-03-02 22:57 ` Christoph Hellwig
2018-03-02 22:57 ` Christoph Hellwig
2018-03-02 22:57 ` Christoph Hellwig
2018-03-02 23:49 ` Dan Williams
2018-03-02 23:49 ` Dan Williams
2018-03-02 23:49 ` Dan Williams
2018-03-02 23:49 ` Dan Williams
2018-03-03 2:19 ` Dan Williams
2018-03-03 2:19 ` Dan Williams
2018-03-03 2:19 ` Dan Williams
2018-03-03 2:19 ` Dan Williams
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=20180302174530.GV19312@magnolia \
--to=darrick.wong@oracle.com \
--cc=adilger.kernel@dilger.ca \
--cc=dan.j.williams@intel.com \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nvdimm@lists.01.org \
--cc=linux-xfs@vger.kernel.org \
--cc=mawilcox@microsoft.com \
--cc=ross.zwisler@linux.intel.com \
--cc=stable@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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.