hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/fs/proc/task_nommu.c
....@@ -25,7 +25,7 @@
2525 struct rb_node *p;
2626 unsigned long bytes = 0, sbytes = 0, slack = 0, size;
2727
28
- down_read(&mm->mmap_sem);
28
+ mmap_read_lock(mm);
2929 for (p = rb_first(&mm->mm_rb); p; p = rb_next(p)) {
3030 vma = rb_entry(p, struct vm_area_struct, vm_rb);
3131
....@@ -64,7 +64,7 @@
6464 else
6565 bytes += kobjsize(current->files);
6666
67
- if (current->sighand && atomic_read(&current->sighand->count) > 1)
67
+ if (current->sighand && refcount_read(&current->sighand->count) > 1)
6868 sbytes += kobjsize(current->sighand);
6969 else
7070 bytes += kobjsize(current->sighand);
....@@ -77,7 +77,7 @@
7777 "Shared:\t%8lu bytes\n",
7878 bytes, slack, sbytes);
7979
80
- up_read(&mm->mmap_sem);
80
+ mmap_read_unlock(mm);
8181 }
8282
8383 unsigned long task_vsize(struct mm_struct *mm)
....@@ -86,12 +86,12 @@
8686 struct rb_node *p;
8787 unsigned long vsize = 0;
8888
89
- down_read(&mm->mmap_sem);
89
+ mmap_read_lock(mm);
9090 for (p = rb_first(&mm->mm_rb); p; p = rb_next(p)) {
9191 vma = rb_entry(p, struct vm_area_struct, vm_rb);
9292 vsize += vma->vm_end - vma->vm_start;
9393 }
94
- up_read(&mm->mmap_sem);
94
+ mmap_read_unlock(mm);
9595 return vsize;
9696 }
9797
....@@ -104,7 +104,7 @@
104104 struct rb_node *p;
105105 unsigned long size = kobjsize(mm);
106106
107
- down_read(&mm->mmap_sem);
107
+ mmap_read_lock(mm);
108108 for (p = rb_first(&mm->mm_rb); p; p = rb_next(p)) {
109109 vma = rb_entry(p, struct vm_area_struct, vm_rb);
110110 size += kobjsize(vma);
....@@ -119,7 +119,7 @@
119119 >> PAGE_SHIFT;
120120 *data = (PAGE_ALIGN(mm->start_stack) - (mm->start_data & PAGE_MASK))
121121 >> PAGE_SHIFT;
122
- up_read(&mm->mmap_sem);
122
+ mmap_read_unlock(mm);
123123 size >>= PAGE_SHIFT;
124124 size += *text + *data;
125125 *resident = size;
....@@ -178,7 +178,7 @@
178178 seq_file_path(m, file, "");
179179 } else if (mm && is_stack(vma)) {
180180 seq_pad(m, ' ');
181
- seq_printf(m, "[stack]");
181
+ seq_puts(m, "[stack]");
182182 }
183183
184184 seq_putc(m, '\n');
....@@ -208,11 +208,16 @@
208208 return ERR_PTR(-ESRCH);
209209
210210 mm = priv->mm;
211
- if (!mm || !mmget_not_zero(mm))
211
+ if (!mm || !mmget_not_zero(mm)) {
212
+ put_task_struct(priv->task);
213
+ priv->task = NULL;
212214 return NULL;
215
+ }
213216
214
- if (down_read_killable(&mm->mmap_sem)) {
217
+ if (mmap_read_lock_killable(mm)) {
215218 mmput(mm);
219
+ put_task_struct(priv->task);
220
+ priv->task = NULL;
216221 return ERR_PTR(-EINTR);
217222 }
218223
....@@ -221,23 +226,21 @@
221226 if (n-- == 0)
222227 return p;
223228
224
- up_read(&mm->mmap_sem);
225
- mmput(mm);
226229 return NULL;
227230 }
228231
229
-static void m_stop(struct seq_file *m, void *_vml)
232
+static void m_stop(struct seq_file *m, void *v)
230233 {
231234 struct proc_maps_private *priv = m->private;
235
+ struct mm_struct *mm = priv->mm;
232236
233
- if (!IS_ERR_OR_NULL(_vml)) {
234
- up_read(&priv->mm->mmap_sem);
235
- mmput(priv->mm);
236
- }
237
- if (priv->task) {
238
- put_task_struct(priv->task);
239
- priv->task = NULL;
240
- }
237
+ if (!priv->task)
238
+ return;
239
+
240
+ mmap_read_unlock(mm);
241
+ mmput(mm);
242
+ put_task_struct(priv->task);
243
+ priv->task = NULL;
241244 }
242245
243246 static void *m_next(struct seq_file *m, void *_p, loff_t *pos)