projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mm/migrate: correct failure handling if !hugepage_migration_support()
[firefly-linux-kernel-4.4.55.git]
/
mm
/
fremap.c
diff --git
a/mm/fremap.c
b/mm/fremap.c
index 5bff0814776870e2974e6e436ad99f99f264e05a..bbc4d660221ac4e514e24d49ce140b25ad5364d2 100644
(file)
--- a/
mm/fremap.c
+++ b/
mm/fremap.c
@@
-208,9
+208,10
@@
get_write_lock:
if (mapping_cap_account_dirty(mapping)) {
unsigned long addr;
struct file *file = get_file(vma->vm_file);
if (mapping_cap_account_dirty(mapping)) {
unsigned long addr;
struct file *file = get_file(vma->vm_file);
+ /* mmap_region may free vma; grab the info now */
+ vm_flags = vma->vm_flags;
- addr = mmap_region(file, start, size,
- vma->vm_flags, pgoff);
+ addr = mmap_region(file, start, size, vm_flags, pgoff);
fput(file);
if (IS_ERR_VALUE(addr)) {
err = addr;
fput(file);
if (IS_ERR_VALUE(addr)) {
err = addr;
@@
-218,7
+219,7
@@
get_write_lock:
BUG_ON(addr != start);
err = 0;
}
BUG_ON(addr != start);
err = 0;
}
- goto out;
+ goto out
_freed
;
}
mutex_lock(&mapping->i_mmap_mutex);
flush_dcache_mmap_lock(mapping);
}
mutex_lock(&mapping->i_mmap_mutex);
flush_dcache_mmap_lock(mapping);
@@
-253,6
+254,7
@@
get_write_lock:
out:
if (vma)
vm_flags = vma->vm_flags;
out:
if (vma)
vm_flags = vma->vm_flags;
+out_freed:
if (likely(!has_write_lock))
up_read(&mm->mmap_sem);
else
if (likely(!has_write_lock))
up_read(&mm->mmap_sem);
else