Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / fs / proc / task_mmu.c
index 541583510cfb996c7461ba98bf2a34741445342b..4648c7f63ae28c1c5323de699e850bbb2f8405a4 100644 (file)
@@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
                };
 
                if (type == CLEAR_REFS_MM_HIWATER_RSS) {
+                       if (down_write_killable(&mm->mmap_sem)) {
+                               count = -EINTR;
+                               goto out_mm;
+                       }
+
                        /*
                         * Writing 5 to /proc/pid/clear_refs resets the peak
                         * resident set size to this mm's current rss value.
                         */
-                       down_write(&mm->mmap_sem);
                        reset_mm_hiwater_rss(mm);
                        up_write(&mm->mmap_sem);
                        goto out_mm;
@@ -1043,7 +1047,10 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
                                if (!(vma->vm_flags & VM_SOFTDIRTY))
                                        continue;
                                up_read(&mm->mmap_sem);
-                               down_write(&mm->mmap_sem);
+                               if (down_write_killable(&mm->mmap_sem)) {
+                                       count = -EINTR;
+                                       goto out_mm;
+                               }
                                for (vma = mm->mmap; vma; vma = vma->vm_next) {
                                        vma->vm_flags &= ~VM_SOFTDIRTY;
                                        vma_set_page_prot(vma);