From: Jan Kara <jack@suse.cz> To: Boaz Harrosh <boaz@plexistor.com> Cc: Dave Chinner <david@fromorbit.com>, Matthew Wilcox <matthew.r.wilcox@intel.com>, Andrew Morton <akpm@linux-foundation.org>, "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>, Jan Kara <jack@suse.cz>, Hugh Dickins <hughd@google.com>, Mel Gorman <mgorman@suse.de>, linux-mm@kvack.org, linux-nvdimm <linux-nvdimm@ml01.01.org>, linux-fsdevel <linux-fsdevel@vger.kernel.org>, Eryu Guan <eguan@redhat.com>, Christoph Hellwig <hch@infradead.org>, Stable Tree <stable@vger.kernel.org> Subject: Re: [PATCH 2/3] dax: use pfn_mkwrite to update c/mtime + freeze protection Date: Tue, 7 Apr 2015 18:28:46 +0200 [thread overview] Message-ID: <20150407162846.GI14897@quack.suse.cz> (raw) In-Reply-To: <552398C6.1010304@plexistor.com> On Tue 07-04-15 11:43:50, Boaz Harrosh wrote: > From: Yigal Korman <yigal@plexistor.com> > > [v1] > Without this patch, c/mtime is not updated correctly when mmap'ed page is > first read from and then written to. > > A new xfstest is submitted for testing this (generic/080) > > [v2] > Jan Kara has pointed out that if we add the > sb_start/end_pagefault pair in the new pfn_mkwrite we > are then fixing another bug where: A user could start > writing to the page while filesystem is frozen. The patch looks good to me. You can add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > CC: Jan Kara <jack@suse.cz> > CC: Matthew Wilcox <matthew.r.wilcox@intel.com> > CC: Dave Chinner <david@fromorbit.com> > CC: Stable Tree <stable@vger.kernel.org> > > Signed-off-by: Yigal Korman <yigal@plexistor.com> > Signed-off-by: Boaz Harrosh <boaz@plexistor.com> > --- > fs/dax.c | 17 +++++++++++++++++ > fs/ext2/file.c | 1 + > fs/ext4/file.c | 1 + > include/linux/fs.h | 1 + > 4 files changed, 20 insertions(+) > > diff --git a/fs/dax.c b/fs/dax.c > index ed1619e..d0bd1f4 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -464,6 +464,23 @@ int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > EXPORT_SYMBOL_GPL(dax_fault); > > /** > + * dax_pfn_mkwrite - handle first write to DAX page > + * @vma: The virtual memory area where the fault occurred > + * @vmf: The description of the fault > + * > + */ > +int dax_pfn_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > +{ > + struct super_block *sb = file_inode(vma->vm_file)->i_sb; > + > + sb_start_pagefault(sb); > + file_update_time(vma->vm_file); > + sb_end_pagefault(sb); > + return VM_FAULT_NOPAGE; > +} > +EXPORT_SYMBOL_GPL(dax_pfn_mkwrite); > + > +/** > * dax_zero_page_range - zero a range within a page of a DAX file > * @inode: The file being truncated > * @from: The file offset that is being truncated to > diff --git a/fs/ext2/file.c b/fs/ext2/file.c > index e317017..866a3ce 100644 > --- a/fs/ext2/file.c > +++ b/fs/ext2/file.c > @@ -39,6 +39,7 @@ static int ext2_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > static const struct vm_operations_struct ext2_dax_vm_ops = { > .fault = ext2_dax_fault, > .page_mkwrite = ext2_dax_mkwrite, > + .pfn_mkwrite = dax_pfn_mkwrite, > }; > > static int ext2_file_mmap(struct file *file, struct vm_area_struct *vma) > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index 598abbb..aa78c70 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -206,6 +206,7 @@ static int ext4_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > static const struct vm_operations_struct ext4_dax_vm_ops = { > .fault = ext4_dax_fault, > .page_mkwrite = ext4_dax_mkwrite, > + .pfn_mkwrite = dax_pfn_mkwrite, > }; > #else > #define ext4_dax_vm_ops ext4_file_vm_ops > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 368e349..394035f 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -2628,6 +2628,7 @@ int dax_clear_blocks(struct inode *, sector_t block, long size); > int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); > int dax_truncate_page(struct inode *, loff_t from, get_block_t); > int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t); > +int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *); > #define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb) > > #ifdef CONFIG_BLOCK > -- > 1.9.3 > > -- Jan Kara <jack@suse.cz> SUSE Labs, CR
WARNING: multiple messages have this Message-ID (diff)
From: Jan Kara <jack@suse.cz> To: Boaz Harrosh <boaz@plexistor.com> Cc: Dave Chinner <david@fromorbit.com>, Matthew Wilcox <matthew.r.wilcox@intel.com>, Andrew Morton <akpm@linux-foundation.org>, "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>, Jan Kara <jack@suse.cz>, Hugh Dickins <hughd@google.com>, Mel Gorman <mgorman@suse.de>, linux-mm@kvack.org, linux-nvdimm <linux-nvdimm@ml01.01.org>, linux-fsdevel <linux-fsdevel@vger.kernel.org>, Eryu Guan <eguan@redhat.com>, Christoph Hellwig <hch@infradead.org>, Stable Tree <stable@vger.kernel.org> Subject: Re: [PATCH 2/3] dax: use pfn_mkwrite to update c/mtime + freeze protection Date: Tue, 7 Apr 2015 18:28:46 +0200 [thread overview] Message-ID: <20150407162846.GI14897@quack.suse.cz> (raw) In-Reply-To: <552398C6.1010304@plexistor.com> On Tue 07-04-15 11:43:50, Boaz Harrosh wrote: > From: Yigal Korman <yigal@plexistor.com> > > [v1] > Without this patch, c/mtime is not updated correctly when mmap'ed page is > first read from and then written to. > > A new xfstest is submitted for testing this (generic/080) > > [v2] > Jan Kara has pointed out that if we add the > sb_start/end_pagefault pair in the new pfn_mkwrite we > are then fixing another bug where: A user could start > writing to the page while filesystem is frozen. The patch looks good to me. You can add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > CC: Jan Kara <jack@suse.cz> > CC: Matthew Wilcox <matthew.r.wilcox@intel.com> > CC: Dave Chinner <david@fromorbit.com> > CC: Stable Tree <stable@vger.kernel.org> > > Signed-off-by: Yigal Korman <yigal@plexistor.com> > Signed-off-by: Boaz Harrosh <boaz@plexistor.com> > --- > fs/dax.c | 17 +++++++++++++++++ > fs/ext2/file.c | 1 + > fs/ext4/file.c | 1 + > include/linux/fs.h | 1 + > 4 files changed, 20 insertions(+) > > diff --git a/fs/dax.c b/fs/dax.c > index ed1619e..d0bd1f4 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -464,6 +464,23 @@ int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > EXPORT_SYMBOL_GPL(dax_fault); > > /** > + * dax_pfn_mkwrite - handle first write to DAX page > + * @vma: The virtual memory area where the fault occurred > + * @vmf: The description of the fault > + * > + */ > +int dax_pfn_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > +{ > + struct super_block *sb = file_inode(vma->vm_file)->i_sb; > + > + sb_start_pagefault(sb); > + file_update_time(vma->vm_file); > + sb_end_pagefault(sb); > + return VM_FAULT_NOPAGE; > +} > +EXPORT_SYMBOL_GPL(dax_pfn_mkwrite); > + > +/** > * dax_zero_page_range - zero a range within a page of a DAX file > * @inode: The file being truncated > * @from: The file offset that is being truncated to > diff --git a/fs/ext2/file.c b/fs/ext2/file.c > index e317017..866a3ce 100644 > --- a/fs/ext2/file.c > +++ b/fs/ext2/file.c > @@ -39,6 +39,7 @@ static int ext2_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > static const struct vm_operations_struct ext2_dax_vm_ops = { > .fault = ext2_dax_fault, > .page_mkwrite = ext2_dax_mkwrite, > + .pfn_mkwrite = dax_pfn_mkwrite, > }; > > static int ext2_file_mmap(struct file *file, struct vm_area_struct *vma) > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index 598abbb..aa78c70 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -206,6 +206,7 @@ static int ext4_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > static const struct vm_operations_struct ext4_dax_vm_ops = { > .fault = ext4_dax_fault, > .page_mkwrite = ext4_dax_mkwrite, > + .pfn_mkwrite = dax_pfn_mkwrite, > }; > #else > #define ext4_dax_vm_ops ext4_file_vm_ops > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 368e349..394035f 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -2628,6 +2628,7 @@ int dax_clear_blocks(struct inode *, sector_t block, long size); > int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); > int dax_truncate_page(struct inode *, loff_t from, get_block_t); > int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t); > +int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *); > #define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb) > > #ifdef CONFIG_BLOCK > -- > 1.9.3 > > -- Jan Kara <jack@suse.cz> SUSE Labs, CR -- 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>
next prev parent reply other threads:[~2015-04-07 16:28 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-04-07 8:33 [PATCH 0/3 v5] dax: some dax fixes and cleanups Boaz Harrosh 2015-04-07 8:33 ` Boaz Harrosh 2015-04-07 8:40 ` [PATCH 1/3] mm(v4.1): New pfn_mkwrite same as page_mkwrite for VM_PFNMAP Boaz Harrosh 2015-04-07 8:51 ` Boaz Harrosh 2015-04-07 8:51 ` Boaz Harrosh 2015-04-07 9:03 ` Kirill A. Shutemov 2015-04-07 9:22 ` Boaz Harrosh 2015-04-07 12:57 ` [PATCH 1/3 v6] " Boaz Harrosh 2015-04-07 12:57 ` Boaz Harrosh 2015-04-07 13:17 ` Kirill A. Shutemov 2015-04-07 13:26 ` Kirill A. Shutemov 2015-04-07 13:37 ` Boaz Harrosh 2015-04-07 13:37 ` Boaz Harrosh 2015-04-07 13:47 ` Kirill A. Shutemov 2015-04-07 14:09 ` Boaz Harrosh 2015-04-07 14:09 ` Boaz Harrosh 2015-04-07 14:06 ` [PATCH 1/3 v7] " Boaz Harrosh 2015-04-07 14:06 ` Boaz Harrosh 2015-04-07 14:12 ` Kirill A. Shutemov 2015-04-07 8:43 ` [PATCH 2/3] dax: use pfn_mkwrite to update c/mtime + freeze protection Boaz Harrosh 2015-04-07 8:43 ` Boaz Harrosh 2015-04-07 16:28 ` Jan Kara [this message] 2015-04-07 16:28 ` Jan Kara 2015-04-07 8:45 ` [PATCH 3/3] dax: Unify ext2/4_{dax,}_file_operations Boaz Harrosh 2015-04-07 8:45 ` Boaz Harrosh 2015-04-07 16:26 ` Jan Kara 2015-04-08 15:56 ` [PATCH 1/3 @stable] mm(v4.0): New pfn_mkwrite same as page_mkwrite for VM_PFNMAP Boaz Harrosh 2015-04-08 15:56 ` Boaz Harrosh 2015-04-08 16:00 ` Boaz Harrosh 2015-04-08 16:00 ` Boaz Harrosh 2015-04-08 20:26 ` Greg KH 2015-04-12 7:49 ` Boaz Harrosh 2015-04-12 7:49 ` Boaz Harrosh -- strict thread matches above, loose matches on Subject: below -- 2015-03-23 12:47 [PATCH 0/3 v3] dax: Fix mmap-write not updating c/mtime Boaz Harrosh 2015-03-23 12:52 ` [PATCH 2/3] dax: use pfn_mkwrite to update c/mtime + freeze protection Boaz Harrosh
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=20150407162846.GI14897@quack.suse.cz \ --to=jack@suse.cz \ --cc=akpm@linux-foundation.org \ --cc=boaz@plexistor.com \ --cc=david@fromorbit.com \ --cc=eguan@redhat.com \ --cc=hch@infradead.org \ --cc=hughd@google.com \ --cc=kirill.shutemov@linux.intel.com \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-nvdimm@ml01.01.org \ --cc=matthew.r.wilcox@intel.com \ --cc=mgorman@suse.de \ --cc=stable@vger.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: linkBe 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.