consolidate task->mm code + fix
Subsystems (3)
PATCH 1/1 consolidate task->mm code + fix
[Re-send]
The patch below consolidates some duplicate code, reduces some indentation, and adds a freeing of a page in mem_read() that could be left unfreed, as far as I can see.
Against 2.5.27 (sorry, I don't have bitkeeper ...)
regards
john
fs/proc/array.c +5 -17
@@ -277,15 +277,11 @@int proc_pid_status (struct task_struct *task,char * buffer) {char * orig = buffer; -struct mm_struct *mm; +struct mm_struct *mm =get_task_mm (task); buffer =task_name (task, buffer); buffer =task_state (task, buffer); -task_lock (task); - mm = task->mm; -if (mm) -atomic_inc (&mm->mm_users); -task_unlock (task); +if (mm) { buffer =task_mem (mm, buffer);mmput (mm);
@@ -481,14 +477,9 @@int proc_pid_statm (struct task_struct *task,char * buffer) { -struct mm_struct *mm;int size=0 , resident=0 , share=0 , trs=0 , lrs=0 , drs=0 , dt=0 ; +struct mm_struct *mm =get_task_mm (task); -task_lock (task); - mm = task->mm; -if (mm) -atomic_inc (&mm->mm_users); -task_unlock (task);if (mm) {struct vm_area_struct * vma;down_read (&mm->mmap_sem);
@@ -626,11 +617,8 @@if (!tmp) goto out_free1; -task_lock (task); - mm = task->mm; -if (mm) -atomic_inc (&mm->mm_users); -task_unlock (task); + mm =get_task_mm (task); + retval =0 ;if (!mm) goto out_free2;
Index: linux/fs/proc/base.c
===================================================================
RCS file: /old/linux-2.5/cvs/linux/fs/proc/base.c,v retrieving revision 1.1.1.1
fs/proc/base.c +54 -61
175 lines not on this page · raw message
include/linux/sched.h +21 -0
@@ -810,6 +813,27 @@return res; } + +/** +* get_task_mm - acquire a reference to the task's mm +* +* Returns %NULL if the task has no mm. User must release +* the mm via mmput() after use. +*/ +static inline struct mm_struct *get_task_mm (struct task_struct * task) +{ +struct mm_struct * mm; + +task_lock (task); + mm = task->mm; +if (mm) +atomic_inc (&mm->mm_users); +task_unlock (task); + +return mm; +} + +/* set thread flags in other task's structures * - see asm/thread_info.h for TIF_xxxx flags available */
Index: linux/kernel/ptrace.c
===================================================================
RCS file: /old/linux-2.5/cvs/linux/kernel/ptrace.c,v retrieving revision 1.1.1.1.2.1
kernel/ptrace.c +1 -6
@@ -124,12 +124,7 @@struct page *page;void *old_buf = buf; -/* Worry about races with exit() */ -task_lock (tsk); - mm = tsk->mm; -if (mm) -atomic_inc (&mm->mm_users); -task_unlock (tsk); + mm =get_task_mm (tsk);if (!mm)return 0 ;