]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - fs/ioprio.c
block: make ioc get/put interface more conventional and fix race on alloction
[mirror_ubuntu-zesty-kernel.git] / fs / ioprio.c
index f79dab83e17b304b123fa725124372561f03e349..998ec239d1ea27a21c7fdd2b835c4e35c198667b 100644 (file)
@@ -48,28 +48,13 @@ 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 = get_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE);
+       if (ioc) {
                ioc->ioprio = ioprio;
                ioc->ioprio_changed = 1;
+               put_io_context(ioc);
        }
 
-       task_unlock(task);
        return err;
 }
 EXPORT_SYMBOL_GPL(set_task_ioprio);