From: Jan Kara Date: Fri, 13 May 2016 04:38:15 +0000 (-0400) Subject: dax: call get_blocks() with create == 1 for write faults to unwritten extents X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=aef39ab1534d1a07061e0ee7e428499e127232eb;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git dax: call get_blocks() with create == 1 for write faults to unwritten extents Currently, __dax_fault() does not call get_blocks() callback with create argument set, when we got back unwritten extent from the initial get_blocks() call during a write fault. This is because originally filesystems were supposed to convert unwritten extents to written ones using complete_unwritten() callback. Later this was abandoned in favor of using pre-zeroed blocks however the condition whether get_blocks() needs to be called with create == 1 remained. Fix the condition so that filesystems are not forced to zero-out and convert unwritten extents when get_blocks() is called with create == 0 (which introduces unnecessary overhead for read faults and can be problematic as the filesystem may possibly be read-only). Signed-off-by: Jan Kara Signed-off-by: Theodore Ts'o --- diff --git a/fs/dax.c b/fs/dax.c index 75ba46d82a76..2494255c5785 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -667,7 +667,7 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, if (error) goto unlock_page; - if (!buffer_mapped(&bh) && !buffer_unwritten(&bh) && !vmf->cow_page) { + if (!buffer_mapped(&bh) && !vmf->cow_page) { if (vmf->flags & FAULT_FLAG_WRITE) { error = get_block(inode, block, &bh, 1); count_vm_event(PGMAJFAULT);