X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fs%2Fioprio.c;h=f84b380d65e5d1a1898248bdb7a77dd3bc8b5aa4;hb=5674124f9f16f196533abb383193bd232c9afc2f;hp=f79dab83e17b304b123fa725124372561f03e349;hpb=0a4ebed781dbb9ecbfef2374d29da1ab3b1a63f3;p=~andy%2Flinux diff --git a/fs/ioprio.c b/fs/ioprio.c index f79dab83e17..f84b380d65e 100644 --- a/fs/ioprio.c +++ b/fs/ioprio.c @@ -48,28 +48,12 @@ int set_task_ioprio(struct task_struct *task, int ioprio) if (err) return err; - task_lock(task); - do { - ioc = task->io_context; - /* see wmb() in current_io_context() */ - smp_read_barrier_depends(); - if (ioc) - break; - - ioc = alloc_io_context(GFP_ATOMIC, -1); - if (!ioc) { - err = -ENOMEM; - break; - } - task->io_context = ioc; - } while (1); - - if (!err) { - ioc->ioprio = ioprio; - ioc->ioprio_changed = 1; + ioc = get_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE); + if (ioc) { + ioc_ioprio_changed(ioc, ioprio); + put_io_context(ioc, NULL); } - task_unlock(task); return err; } EXPORT_SYMBOL_GPL(set_task_ioprio);