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
drm/i915: Invalidate media caches on gen7
[firefly-linux-kernel-4.4.55.git]
/
mm
/
fremap.c
diff --git
a/mm/fremap.c
b/mm/fremap.c
index 87da3590c61e20287b4854e8212c178f96cb73c6..1fb6bfe39d8cd54fdb9ff5333244623b84920cc6 100644
(file)
--- a/
mm/fremap.c
+++ b/
mm/fremap.c
@@
-203,9
+203,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;
@@
-213,7
+214,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);
@@
-248,6
+249,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