| .. | .. |
|---|
| 57 | 57 | * If the interval [start,end) covers some unmapped address ranges, |
|---|
| 58 | 58 | * just ignore them, but return -ENOMEM at the end. |
|---|
| 59 | 59 | */ |
|---|
| 60 | | - down_read(&mm->mmap_sem); |
|---|
| 60 | + mmap_read_lock(mm); |
|---|
| 61 | 61 | vma = find_vma(mm, start); |
|---|
| 62 | 62 | for (;;) { |
|---|
| 63 | 63 | struct file *file; |
|---|
| .. | .. |
|---|
| 88 | 88 | if ((flags & MS_SYNC) && file && |
|---|
| 89 | 89 | (vma->vm_flags & VM_SHARED)) { |
|---|
| 90 | 90 | get_file(file); |
|---|
| 91 | | - up_read(&mm->mmap_sem); |
|---|
| 91 | + mmap_read_unlock(mm); |
|---|
| 92 | 92 | error = vfs_fsync_range(file, fstart, fend, 1); |
|---|
| 93 | 93 | fput(file); |
|---|
| 94 | 94 | if (error || start >= end) |
|---|
| 95 | 95 | goto out; |
|---|
| 96 | | - down_read(&mm->mmap_sem); |
|---|
| 96 | + mmap_read_lock(mm); |
|---|
| 97 | 97 | vma = find_vma(mm, start); |
|---|
| 98 | 98 | } else { |
|---|
| 99 | 99 | if (start >= end) { |
|---|
| .. | .. |
|---|
| 104 | 104 | } |
|---|
| 105 | 105 | } |
|---|
| 106 | 106 | out_unlock: |
|---|
| 107 | | - up_read(&mm->mmap_sem); |
|---|
| 107 | + mmap_read_unlock(mm); |
|---|
| 108 | 108 | out: |
|---|
| 109 | 109 | return error ? : unmapped_error; |
|---|
| 110 | 110 | } |
|---|