vserver 1.9.3
[linux-2.6.git] / fs / proc / task_nommu.c
index 126db97..275dedc 100644 (file)
@@ -68,11 +68,12 @@ unsigned long task_vsize(struct mm_struct *mm)
        struct mm_tblock_struct *tbp;
        unsigned long vsize = 0;
 
+       down_read(&mm->mmap_sem);
        for (tbp = &mm->context.tblock; tbp; tbp = tbp->next) {
                if (tbp->rblock)
                        vsize += kobjsize(tbp->rblock->kblock);
        }
-
+       up_read(&mm->mmap_sem);
        return vsize;
 }
 
@@ -81,7 +82,8 @@ int task_statm(struct mm_struct *mm, int *shared, int *text,
 {
        struct mm_tblock_struct *tbp;
        int size = kobjsize(mm);
-       
+
+       down_read(&mm->mmap_sem);
        for (tbp = &mm->context.tblock; tbp; tbp = tbp->next) {
                if (tbp->next)
                        size += kobjsize(tbp->next);
@@ -93,7 +95,7 @@ int task_statm(struct mm_struct *mm, int *shared, int *text,
 
        size += (*text = mm->end_code - mm->start_code);
        size += (*data = mm->start_stack - mm->start_data);
-
+       up_read(&mm->mmap_sem);
        *resident = size;
        return size;
 }