diff options
Diffstat (limited to 'fs/proc/array.c')
| -rw-r--r-- | fs/proc/array.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index 8c527656000c..35d1ff77eb4f 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -181,7 +181,7 @@ static inline char * task_mem(struct mm_struct *mm, char *buffer) unsigned long data = 0, stack = 0; unsigned long exec = 0, lib = 0; - down(&mm->mmap_sem); + down_read(&mm->mmap_sem); for (vma = mm->mmap; vma; vma = vma->vm_next) { unsigned long len = (vma->vm_end - vma->vm_start) >> 10; if (!vma->vm_file) { @@ -212,7 +212,7 @@ static inline char * task_mem(struct mm_struct *mm, char *buffer) mm->rss << (PAGE_SHIFT-10), data - stack, stack, exec - lib, lib); - up(&mm->mmap_sem); + up_read(&mm->mmap_sem); return buffer; } @@ -321,7 +321,7 @@ int proc_pid_stat(struct task_struct *task, char * buffer) task_unlock(task); if (mm) { struct vm_area_struct *vma; - down(&mm->mmap_sem); + down_read(&mm->mmap_sem); vma = mm->mmap; while (vma) { vsize += vma->vm_end - vma->vm_start; @@ -329,7 +329,7 @@ int proc_pid_stat(struct task_struct *task, char * buffer) } eip = KSTK_EIP(task); esp = KSTK_ESP(task); - up(&mm->mmap_sem); + up_read(&mm->mmap_sem); } wchan = get_wchan(task); @@ -484,7 +484,7 @@ int proc_pid_statm(struct task_struct *task, char * buffer) task_unlock(task); if (mm) { struct vm_area_struct * vma; - down(&mm->mmap_sem); + down_read(&mm->mmap_sem); vma = mm->mmap; while (vma) { pgd_t *pgd = pgd_offset(mm, vma->vm_start); @@ -505,7 +505,7 @@ int proc_pid_statm(struct task_struct *task, char * buffer) drs += pages; vma = vma->vm_next; } - up(&mm->mmap_sem); + up_read(&mm->mmap_sem); mmput(mm); } return sprintf(buffer,"%d %d %d %d %d %d %d\n", @@ -582,7 +582,7 @@ ssize_t proc_pid_read_maps (struct task_struct *task, struct file * file, char * column = *ppos & (MAPS_LINE_LENGTH-1); /* quickly go to line lineno */ - down(&mm->mmap_sem); + down_read(&mm->mmap_sem); for (map = mm->mmap, i = 0; map && (i < lineno); map = map->vm_next, i++) continue; @@ -644,9 +644,7 @@ ssize_t proc_pid_read_maps (struct task_struct *task, struct file * file, char * i = len-column; if (i > count) i = count; - up(&mm->mmap_sem); copy_to_user(destptr, line+column, i); /* may have slept */ - down(&mm->mmap_sem); destptr += i; count -= i; column += i; @@ -665,7 +663,7 @@ ssize_t proc_pid_read_maps (struct task_struct *task, struct file * file, char * if (volatile_task) break; } - up(&mm->mmap_sem); + up_read(&mm->mmap_sem); /* encode f_pos */ *ppos = (lineno << MAPS_LINE_SHIFT) + column; |
