summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@tv-sign.ru>2006-08-29 09:17:41 +0200
committerJens Axboe <axboe@nelson.home.kernel.dk>2006-09-30 20:31:18 +0200
commitcf342e52e3117391868fb4bd900ce772a27a5a1a (patch)
tree4e9d48d0680bfd8dc90de645c891a6fa47931fdd
parent[PATCH] exit_io_context: don't disable irqs (diff)
downloadlinux-cf342e52e3117391868fb4bd900ce772a27a5a1a.tar.xz
linux-cf342e52e3117391868fb4bd900ce772a27a5a1a.zip
[PATCH] Don't need to disable interrupts for tasklist_lock
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--fs/ioprio.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/ioprio.c b/fs/ioprio.c
index 0fd1089d7bf6..03dc4f269b76 100644
--- a/fs/ioprio.c
+++ b/fs/ioprio.c
@@ -81,7 +81,12 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
}
ret = -ESRCH;
- read_lock_irq(&tasklist_lock);
+ /*
+ * We want IOPRIO_WHO_PGRP/IOPRIO_WHO_USER to be "atomic",
+ * so we can't use rcu_read_lock(). See re-copy of ->ioprio
+ * in copy_process().
+ */
+ read_lock(&tasklist_lock);
switch (which) {
case IOPRIO_WHO_PROCESS:
if (!who)
@@ -124,7 +129,7 @@ free_uid:
ret = -EINVAL;
}
- read_unlock_irq(&tasklist_lock);
+ read_unlock(&tasklist_lock);
return ret;
}
@@ -170,7 +175,7 @@ asmlinkage long sys_ioprio_get(int which, int who)
int ret = -ESRCH;
int tmpio;
- read_lock_irq(&tasklist_lock);
+ read_lock(&tasklist_lock);
switch (which) {
case IOPRIO_WHO_PROCESS:
if (!who)
@@ -221,7 +226,7 @@ asmlinkage long sys_ioprio_get(int which, int who)
ret = -EINVAL;
}
- read_unlock_irq(&tasklist_lock);
+ read_unlock(&tasklist_lock);
return ret;
}