From: email@example.com To: firstname.lastname@example.org Cc: Ira Weiny <email@example.com>, Alexander Viro <firstname.lastname@example.org>, "Darrick J. Wong" <email@example.com>, Dan Williams <firstname.lastname@example.org>, Dave Chinner <email@example.com>, Christoph Hellwig <firstname.lastname@example.org>, "Theodore Y. Ts'o" <email@example.com>, Jan Kara <firstname.lastname@example.org>, email@example.com, firstname.lastname@example.org, email@example.com Subject: [PATCH v3 00/12] Enable per-file/directory DAX operations V3 Date: Sat, 8 Feb 2020 11:34:33 -0800 [thread overview] Message-ID: <firstname.lastname@example.org> (raw) From: Ira Weiny <email@example.com> Changes from V2: * Move i_dax_sem to be a global percpu_rw_sem rather than per inode Internal discussions with Dan determined this would be easier, just as performant, and slightly less overhead that having it in the SB as suggested by Jan * Fix locking order in comments and throughout code * Change "mode" to "state" throughout commits * Add CONFIG_FS_DAX wrapper to disable inode_[un]lock_state() when not configured * Add static branch for which is activated by a device which supports DAX in XFS * Change "lock/unlock" to up/down read/write as appropriate Previous names were over simplified * Update comments/documentation * Remove the xfs specific lock to the vfs (global) layer. * Fix i_dax_sem locking order and comments * Move 'i_mapped' count from struct inode to struct address_space and rename it to mmap_count * Add inode_has_mappings() call * Fix build issues * Clean up syntax spacing and minor issues * Update man page text for STATX_ATTR_DAX * Add reviewed-by's * Rebase to latest linux-next Rename patch: from: fs/xfs: Add lock/unlock state to xfs to: fs/xfs: Add write DAX lock to xfs layer Add patch: fs/xfs: Clarify lockdep dependency for xfs_isilocked() Drop patch: fs/xfs: Fix truncate up https://github.com/weiny2/linux-kernel/tree/dax-file-state-change-v3 At LSF/MM'19   we discussed applications that overestimate memory consumption due to their inability to detect whether the kernel will instantiate page cache for a file, and cases where a global dax enable via a mount option is too coarse. The following patch series enables selecting the use of DAX on individual files and/or directories on xfs, and lays some groundwork to do so in ext4. In this scheme the dax mount option can be omitted to allow the per-file property to take effect. The insight at LSF/MM was to separate the per-mount or per-file "physical" capability switch from an "effective" attribute for the file. At LSF/MM we discussed the difficulties of switching the DAX state of a file with active mappings / page cache. It was thought the races could be avoided by limiting DAX state flips to 0-length files. However, this turns out to not be true. This is because address space operations (a_ops) may be in use at any time the inode is referenced and users have expressed a desire to be able to change the DAX state on a file with data in it. For those reasons this patch set allows changing the DAX state flag on a file as long as it is not current mapped. Furthermore, DAX is a property of the inode and as such, many operations other than address space operations need to be protected during a DAX state change. Therefore callbacks are placed within the inode operations and used to lock the inode as appropriate. As in V1, Users are able to query the effective and physical flags separately at any time. Specifically the addition of the statx attribute bit allows them to ensure the file is operating in the DAX state they intend. This 'effective flag' and physical flags could differ when the filesystem is mounted with the dax flag for example. It should be noted that the physical DAX flag inheritance is not shown in this patch set as it was maintained from previous work on XFS. The physical DAX flag and it's inheritance will need to be added to other file systems for user control.  https://lwn.net/Articles/787973/  https://lwn.net/Articles/787233/  https://lkml.org/lkml/2019/10/20/96  https://patchwork.kernel.org/patch/11310511/ To: firstname.lastname@example.org Cc: Alexander Viro <email@example.com> Cc: "Darrick J. Wong" <firstname.lastname@example.org> Cc: Dan Williams <email@example.com> Cc: Dave Chinner <firstname.lastname@example.org> Cc: Christoph Hellwig <email@example.com> Cc: "Theodore Y. Ts'o" <firstname.lastname@example.org> Cc: Jan Kara <email@example.com> Cc: firstname.lastname@example.org Cc: email@example.com Cc: firstname.lastname@example.org Ira Weiny (12): fs/stat: Define DAX statx attribute fs/xfs: Isolate the physical DAX flag from effective fs/xfs: Separate functionality of xfs_inode_supports_dax() fs/xfs: Clean up DAX support check fs: remove unneeded IS_DAX() check fs/xfs: Check if the inode supports DAX under lock fs: Add locking for a dynamic DAX state fs/xfs: Clarify lockdep dependency for xfs_isilocked() fs/xfs: Add write DAX lock to xfs layer fs: Prevent DAX state change if file is mmap'ed fs/xfs: Clean up locking in dax invalidate fs/xfs: Allow toggle of effective DAX flag Documentation/filesystems/vfs.rst | 17 ++++++ fs/attr.c | 1 + fs/dax.c | 3 ++ fs/inode.c | 15 ++++-- fs/iomap/buffered-io.c | 1 + fs/open.c | 4 ++ fs/stat.c | 5 ++ fs/super.c | 3 ++ fs/xfs/xfs_inode.c | 24 +++++++-- fs/xfs/xfs_inode.h | 8 ++- fs/xfs/xfs_ioctl.c | 56 ++++++++++++-------- fs/xfs/xfs_iops.c | 51 ++++++++++++++---- fs/xfs/xfs_iops.h | 2 + fs/xfs/xfs_super.c | 16 +++--- include/linux/fs.h | 86 +++++++++++++++++++++++++++++-- include/uapi/linux/stat.h | 1 + mm/fadvise.c | 10 +++- mm/filemap.c | 4 ++ mm/huge_memory.c | 1 + mm/khugepaged.c | 2 + mm/madvise.c | 3 ++ mm/mmap.c | 19 ++++++- mm/util.c | 9 +++- 23 files changed, 287 insertions(+), 54 deletions(-) -- 2.21.0
next reply other threads:[~2020-02-08 19:34 UTC|newest] Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-08 19:34 ira.weiny [this message] 2020-02-08 19:34 ` [PATCH v3 01/12] fs/stat: Define DAX statx attribute ira.weiny 2020-02-08 19:34 ` [PATCH v3 02/12] fs/xfs: Isolate the physical DAX flag from effective ira.weiny 2020-02-08 19:34 ` [PATCH v3 03/12] fs/xfs: Separate functionality of xfs_inode_supports_dax() ira.weiny 2020-02-11 5:47 ` Dave Chinner 2020-02-11 16:13 ` Ira Weiny 2020-02-08 19:34 ` [PATCH v3 04/12] fs/xfs: Clean up DAX support check ira.weiny 2020-02-11 5:57 ` Dave Chinner 2020-02-11 16:28 ` Ira Weiny 2020-02-11 20:38 ` Dave Chinner 2020-02-08 19:34 ` [PATCH v3 05/12] fs: remove unneeded IS_DAX() check ira.weiny 2020-02-11 5:34 ` Dave Chinner 2020-02-11 16:38 ` Ira Weiny 2020-02-11 20:41 ` Dave Chinner 2020-02-12 16:04 ` Ira Weiny 2020-02-08 19:34 ` [PATCH v3 06/12] fs/xfs: Check if the inode supports DAX under lock ira.weiny 2020-02-11 6:16 ` Dave Chinner 2020-02-11 17:55 ` Ira Weiny 2020-02-11 20:42 ` Dave Chinner 2020-02-12 16:10 ` Ira Weiny 2020-02-08 19:34 ` [PATCH v3 07/12] fs: Add locking for a dynamic DAX state ira.weiny 2020-02-11 8:00 ` Dave Chinner 2020-02-11 20:14 ` Ira Weiny 2020-02-11 20:59 ` Dan Williams 2020-02-11 21:49 ` Dave Chinner 2020-02-12 6:31 ` Darrick J. Wong 2020-02-08 19:34 ` [PATCH v3 08/12] fs/xfs: Clarify lockdep dependency for xfs_isilocked() ira.weiny 2020-02-08 19:34 ` [PATCH v3 09/12] fs/xfs: Add write DAX lock to xfs layer ira.weiny 2020-02-08 19:34 ` [PATCH v3 10/12] fs: Prevent DAX state change if file is mmap'ed ira.weiny 2020-02-08 19:34 ` [PATCH v3 11/12] fs/xfs: Clean up locking in dax invalidate ira.weiny 2020-02-08 19:34 ` [PATCH v3 12/12] fs/xfs: Allow toggle of effective DAX flag ira.weiny 2020-02-10 15:15 ` [PATCH v3 00/12] Enable per-file/directory DAX operations V3 Jeff Moyer 2020-02-11 20:17 ` Ira Weiny 2020-02-12 19:49 ` Jeff Moyer 2020-02-13 19:01 ` Ira Weiny 2020-02-13 19:05 ` Ira Weiny 2020-02-13 19:58 ` Darrick J. Wong 2020-02-13 23:29 ` Ira Weiny 2020-02-14 0:16 ` Dan Williams 2020-02-14 20:06 ` Ira Weiny 2020-02-14 21:23 ` Jeff Moyer 2020-02-14 21:58 ` Ira Weiny 2020-02-14 22:06 ` Jeff Moyer 2020-02-14 22:58 ` Jeff Moyer 2020-02-14 23:03 ` Jeff Moyer 2020-02-18 2:35 ` Ira Weiny 2020-02-18 14:22 ` Jeff Moyer 2020-02-18 23:54 ` Ira Weiny 2020-02-20 16:20 ` Ira Weiny 2020-02-20 16:30 ` Darrick J. Wong 2020-02-20 16:49 ` Ira Weiny 2020-02-20 17:00 ` 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 \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --subject='Re: [PATCH v3 00/12] Enable per-file/directory DAX operations V3' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).