From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Jan Kara <jack@suse.cz>
Cc: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
Ross Zwisler <ross.zwisler@linux.intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Andy Lutomirski <luto@kernel.org>,
linux-nvdimm@lists.01.org, linux-xfs@vger.kernel.org,
Christoph Hellwig <hch@infradead.org>,
Dave Chinner <david@fromorbit.com>
Subject: Re: [PATCH 5/7] dax, iomap: Add support for synchronous faults
Date: Thu, 27 Jul 2017 16:42:45 -0600 [thread overview]
Message-ID: <20170727224245.GF22000@linux.intel.com> (raw)
In-Reply-To: <20170727131245.28279-6-jack@suse.cz>
On Thu, Jul 27, 2017 at 03:12:43PM +0200, Jan Kara wrote:
> Add a flag to iomap interface informing the caller that inode needs
> fdstasync(2) for returned extent to become persistent and use it in DAX
> fault code so that we map such extents only read only. We propagate the
> information that the page table entry has been inserted write-protected
> from dax_iomap_fault() with a new VM_FAULT_RO flag. Filesystem fault
> handler is then responsible for calling fdatasync(2) and updating page
> tables to map pfns read-write. dax_iomap_fault() also takes care of
> updating vmf->orig_pte to match the PTE that was inserted so that we can
> safely recheck that PTE did not change while write-enabling it.
>
> Signed-off-by: Jan Kara <jack@suse.cz>
<>
> @@ -1385,9 +1409,13 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, bool sync,
> if (iomap.offset + iomap.length < pos + PMD_SIZE)
> goto finish_iomap;
>
> + force_ro = (vmf->flags & FAULT_FLAG_WRITE) && sync &&
> + (iomap.flags & IOMAP_F_NEEDDSYNC);
I already mentioned this in my response to your cover letter, but I think that
we can just lean really heavily on IOMAP_F_NEEDDSYNC and have that let us know
that we are doing sync faults and that the fault is a write. That simplifies
a few things in this patch, with the above just becoming:
force_ro = (iomap.flags & IOMAP_F_NEEDDSYNC);
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index fa036093e76c..5085647d9f2f 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -1142,6 +1142,8 @@ static inline void clear_page_pfmemalloc(struct page *page)
> #define VM_FAULT_RETRY 0x0400 /* ->fault blocked, must retry */
> #define VM_FAULT_FALLBACK 0x0800 /* huge page fault failed, fall back to small */
> #define VM_FAULT_DONE_COW 0x1000 /* ->fault has fully handled COW */
> +#define VM_FAULT_RO 0x2000 /* Write fault was handled just by
> + * inserting RO page table entry for DAX */
I wonder if we should name this flag something a little stronger and more
specific to its usage with respect to DAX and sync faults? Maybe
"VM_FAULT_NEEDDSYNC" for consistency with the iomap flag?
WARNING: multiple messages have this Message-ID (diff)
From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Jan Kara <jack@suse.cz>
Cc: Christoph Hellwig <hch@infradead.org>,
linux-nvdimm@lists.01.org, Dave Chinner <david@fromorbit.com>,
linux-xfs@vger.kernel.org, Andy Lutomirski <luto@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org
Subject: Re: [PATCH 5/7] dax, iomap: Add support for synchronous faults
Date: Thu, 27 Jul 2017 16:42:45 -0600 [thread overview]
Message-ID: <20170727224245.GF22000@linux.intel.com> (raw)
In-Reply-To: <20170727131245.28279-6-jack@suse.cz>
On Thu, Jul 27, 2017 at 03:12:43PM +0200, Jan Kara wrote:
> Add a flag to iomap interface informing the caller that inode needs
> fdstasync(2) for returned extent to become persistent and use it in DAX
> fault code so that we map such extents only read only. We propagate the
> information that the page table entry has been inserted write-protected
> from dax_iomap_fault() with a new VM_FAULT_RO flag. Filesystem fault
> handler is then responsible for calling fdatasync(2) and updating page
> tables to map pfns read-write. dax_iomap_fault() also takes care of
> updating vmf->orig_pte to match the PTE that was inserted so that we can
> safely recheck that PTE did not change while write-enabling it.
>
> Signed-off-by: Jan Kara <jack@suse.cz>
<>
> @@ -1385,9 +1409,13 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, bool sync,
> if (iomap.offset + iomap.length < pos + PMD_SIZE)
> goto finish_iomap;
>
> + force_ro = (vmf->flags & FAULT_FLAG_WRITE) && sync &&
> + (iomap.flags & IOMAP_F_NEEDDSYNC);
I already mentioned this in my response to your cover letter, but I think that
we can just lean really heavily on IOMAP_F_NEEDDSYNC and have that let us know
that we are doing sync faults and that the fault is a write. That simplifies
a few things in this patch, with the above just becoming:
force_ro = (iomap.flags & IOMAP_F_NEEDDSYNC);
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index fa036093e76c..5085647d9f2f 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -1142,6 +1142,8 @@ static inline void clear_page_pfmemalloc(struct page *page)
> #define VM_FAULT_RETRY 0x0400 /* ->fault blocked, must retry */
> #define VM_FAULT_FALLBACK 0x0800 /* huge page fault failed, fall back to small */
> #define VM_FAULT_DONE_COW 0x1000 /* ->fault has fully handled COW */
> +#define VM_FAULT_RO 0x2000 /* Write fault was handled just by
> + * inserting RO page table entry for DAX */
I wonder if we should name this flag something a little stronger and more
specific to its usage with respect to DAX and sync faults? Maybe
"VM_FAULT_NEEDDSYNC" for consistency with the iomap flag?
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
next prev parent reply other threads:[~2017-07-27 22:42 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-27 13:12 [RFC PATCH 0/7] dax, ext4: Synchronous page faults Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` [PATCH 2/7] dax: Add sync argument to dax_iomap_fault() Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
[not found] ` <20170727131245.28279-3-jack-AlSwsSmVLrQ@public.gmane.org>
2017-07-27 22:06 ` Ross Zwisler
2017-07-27 22:06 ` Ross Zwisler
2017-07-27 22:06 ` Ross Zwisler
2017-07-28 9:40 ` Jan Kara
2017-07-28 9:40 ` Jan Kara
2017-07-27 13:12 ` [PATCH 7/7] ext4: Support for synchronous DAX faults Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 22:57 ` Ross Zwisler
2017-07-27 22:57 ` Ross Zwisler
2017-07-27 14:09 ` [RFC PATCH 0/7] dax, ext4: Synchronous page faults Jeff Moyer
2017-07-27 14:09 ` Jeff Moyer
2017-07-27 14:09 ` Jeff Moyer
2017-07-27 21:57 ` Ross Zwisler
2017-07-27 21:57 ` Ross Zwisler
2017-07-28 2:05 ` Andy Lutomirski
2017-07-28 2:05 ` Andy Lutomirski
[not found] ` <CALCETrVzxrQ76BXEfo4kcRFyQmxbrMwCLE17yPyTJzz0tUs+Dg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-28 9:38 ` Jan Kara
2017-07-28 9:38 ` Jan Kara
2017-07-28 9:38 ` Jan Kara
2017-08-01 11:02 ` Christoph Hellwig
2017-08-01 11:02 ` Christoph Hellwig
[not found] ` <20170801110241.GE6742-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2017-08-01 11:26 ` Jan Kara
2017-08-01 11:26 ` Jan Kara
2017-08-01 11:26 ` Jan Kara
2017-08-08 0:24 ` Dan Williams
2017-08-08 0:24 ` Dan Williams
[not found] ` <CAPcyv4hdOsuA6cqRCnOZMLMXvycwZevg06xOVZz3u0kupm2Drw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-11 10:03 ` Christoph Hellwig
2017-08-11 10:03 ` Christoph Hellwig
2017-08-11 10:03 ` Christoph Hellwig
[not found] ` <20170811100327.GD7064-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2017-08-13 2:44 ` Dan Williams
2017-08-13 2:44 ` Dan Williams
2017-08-13 2:44 ` Dan Williams
2017-08-13 9:25 ` Christoph Hellwig
2017-08-13 9:25 ` Christoph Hellwig
2017-08-13 17:08 ` Dan Williams
2017-08-13 17:08 ` Dan Williams
2017-08-14 8:30 ` Jan Kara
2017-08-14 8:30 ` Jan Kara
2017-08-14 14:04 ` Boaz Harrosh
2017-08-14 14:04 ` Boaz Harrosh
2017-08-14 16:03 ` Dan Williams
2017-08-14 16:03 ` Dan Williams
2017-08-15 9:06 ` Boaz Harrosh
2017-08-15 9:06 ` Boaz Harrosh
2017-08-15 9:44 ` Boaz Harrosh
2017-08-15 9:44 ` Boaz Harrosh
[not found] ` <CAPcyv4jWW5EH8KrGWe-9oAT7RvFryh1ci6CcGeDb-zcOS9QMxw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-21 19:57 ` Ross Zwisler
2017-08-21 19:57 ` Ross Zwisler
2017-08-21 19:57 ` Ross Zwisler
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
[not found] ` <20170727131245.28279-1-jack-AlSwsSmVLrQ@public.gmane.org>
2017-07-27 13:12 ` [PATCH 1/7] mm: Remove VM_FAULT_HWPOISON_LARGE_MASK Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
[not found] ` <20170727131245.28279-2-jack-AlSwsSmVLrQ@public.gmane.org>
2017-07-27 21:57 ` Ross Zwisler
2017-07-27 21:57 ` Ross Zwisler
2017-07-27 21:57 ` Ross Zwisler
2017-08-01 10:52 ` Christoph Hellwig
2017-08-01 10:52 ` Christoph Hellwig
2017-08-01 10:52 ` Christoph Hellwig
2017-07-27 13:12 ` [PATCH 3/7] dax: Simplify arguments of dax_insert_mapping() Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
[not found] ` <20170727131245.28279-4-jack-AlSwsSmVLrQ@public.gmane.org>
2017-07-27 22:09 ` Ross Zwisler
2017-07-27 22:09 ` Ross Zwisler
2017-07-27 22:09 ` Ross Zwisler
2017-08-01 10:54 ` Christoph Hellwig
2017-08-01 10:54 ` Christoph Hellwig
2017-08-01 10:54 ` Christoph Hellwig
2017-07-27 13:12 ` [PATCH 4/7] dax: Make dax_insert_mapping() return VM_FAULT_ state Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 22:22 ` Ross Zwisler
2017-07-27 22:22 ` Ross Zwisler
2017-07-28 9:43 ` Jan Kara
2017-07-28 9:43 ` Jan Kara
2017-07-27 13:12 ` [PATCH 5/7] dax, iomap: Add support for synchronous faults Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 22:42 ` Ross Zwisler [this message]
2017-07-27 22:42 ` Ross Zwisler
[not found] ` <20170727224245.GF22000-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-08-01 10:56 ` Christoph Hellwig
2017-08-01 10:56 ` Christoph Hellwig
2017-08-01 10:56 ` Christoph Hellwig
2017-07-27 13:12 ` [PATCH 6/7] dax: Implement dax_pfn_mkwrite() Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
2017-07-27 13:12 ` Jan Kara
[not found] ` <20170727131245.28279-7-jack-AlSwsSmVLrQ@public.gmane.org>
2017-07-27 22:53 ` Ross Zwisler
2017-07-27 22:53 ` Ross Zwisler
2017-07-27 22:53 ` Ross Zwisler
2017-07-27 23:04 ` Ross Zwisler
2017-07-27 23:04 ` Ross Zwisler
[not found] ` <20170727225322.GG22000-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-07-28 10:37 ` Jan Kara
2017-07-28 10:37 ` Jan Kara
2017-07-28 10:37 ` Jan Kara
2017-08-01 10:52 ` [RFC PATCH 0/7] dax, ext4: Synchronous page faults Christoph Hellwig
2017-08-01 10:52 ` Christoph Hellwig
2017-08-01 10:52 ` Christoph Hellwig
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=20170727224245.GF22000@linux.intel.com \
--to=ross.zwisler@linux.intel.com \
--cc=dan.j.williams@intel.com \
--cc=david@fromorbit.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nvdimm@lists.01.org \
--cc=linux-xfs@vger.kernel.org \
--cc=luto@kernel.org \
/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.