FAILED: patch "[PATCH] dax: use pfn_mkwrite to update c/mtime + freeze protection" failed to apply to 4.0-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 4.0-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
0e3b210ce1722168227cb3bc7746256d0c0afeceMon Sep 17 00:00:00 2001
From: Boaz Harrosh <[email protected]>
Date: Wed, 15 Apr 2015 16:15:14 -0700
Subject: [PATCH] dax: use pfn_mkwrite to update c/mtime + freeze protection
From: Yigal Korman <[email protected]>
[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.
fs/dax.c +17 -0
@@ -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
fs/ext2/file.c +1 -0
@@ -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)
fs/ext4/file.c +1 -0
@@ -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
include/linux/fs.h +1 -0
@@ -2620,6 +2620,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
Quoted 10 lines · On 05/02/2015 05:15 PM, [email protected] wrote:
The patch below does not apply to the 4.0-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.thanks,
greg k-h
Hi Greg
I think it is safe to ignore this patch for 4.0 . It is for DAX that went into 4.0. But DAX is very experimental in 4.0 so it is not worth the trouble.
[This is the patch, that I sent the mm preliminary patch for, which we talk about...]
Ye dropping it should be fine, thanks.
Boaz
Quoted 98 lines
------------------ original commit in Linus's tree ------------------
From
0e3b210ce1722168227cb3bc7746256d0c0afeceMon Sep 17 00:00:00 2001
From: Boaz Harrosh <[email protected]>
Date: Wed, 15 Apr 2015 16:15:14 -0700
Subject: [PATCH] dax: usepfn_mkwriteto update c/mtime + freeze protectionFrom: Yigal Korman <[email protected]>
[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 newpfn_mkwritewe are then fixing another bug where: A user could start writing to the page while filesystem is frozen.Signed-off-by Yigal Korman <[email protected]>Signed-off-by Boaz Harrosh <[email protected]>Reviewed-by Jan Kara <[email protected]>Cc Matthew Wilcox <[email protected]>Cc Dave Chinner <[email protected]>Cc Hugh Dickins <[email protected]>Cc Mel Gorman <[email protected]>Cc Kirill A. Shutemov <[email protected]>Cc <[email protected]>Signed-off-by Andrew Morton <[email protected]>Signed-off-by Linus Torvalds <[email protected]>fs/dax.c +17
-0@@ -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 fs/ext2/file.c +1
-0@@ -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)fs/ext4/file.c +1
-0@@ -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_opsinclude/linux/fs.h +1
-0@@ -2620,6 +2620,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