summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@linux-foundation.org>2015-01-17 11:24:32 +1100
committerStephen Rothwell <sfr@canb.auug.org.au>2015-01-19 18:32:10 +1100
commita27a5cb7c388a8a782f645a0f3e77c1723c91fe6 (patch)
treeb605da182850b729b1d36347600f19d1f620b233
parent3f0a4c63532b1d5e5c692b46effc6ebff0806bdc (diff)
mm-allow-page-fault-handlers-to-perform-the-cow-fix
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Matthew Wilcox <matthew.r.wilcox@intel.com> Cc: Andreas Dilger <andreas.dilger@intel.com> Cc: Boaz Harrosh <boaz@plexistor.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Dave Chinner <david@fromorbit.com> Cc: Jan Kara <jack@suse.cz> Cc: Jens Axboe <axboe@kernel.dk> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Randy Dunlap <rdunlap@infradead.org> Cc: Ross Zwisler <ross.zwisler@linux.intel.com> Cc: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--mm/memory.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 82b60936dd33..a02b366ad7ba 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2894,7 +2894,11 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
unlock_page(fault_page);
page_cache_release(fault_page);
} else {
- mutex_unlock(&vma->vm_file->f_mapping->i_mmap_mutex);
+ /*
+ * DAX doesn't have a page to lock, so it uses
+ * i_mmap_lock()
+ */
+ i_mmap_unlock_read(&vma->vm_file->f_mapping);
}
goto uncharge_out;
}
@@ -2906,7 +2910,11 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
unlock_page(fault_page);
page_cache_release(fault_page);
} else {
- mutex_unlock(&vma->vm_file->f_mapping->i_mmap_mutex);
+ /*
+ * DAX doesn't have a page to lock, so it uses
+ * i_mmap_lock()
+ */
+ i_mmap_unlock_read(&vma->vm_file->f_mapping);
}
return ret;
uncharge_out: