Message ID | 20211209063131.18537-10-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/11] block: remove the nr_task field from struct io_context | expand |
On Thu 09-12-21 07:31:29, Christoph Hellwig wrote: > The flow in set_task_ioprio can be simplified by simply open coding > create_task_io_context, which removes a refcount roundtrip on the I/O > context. > > Signed-off-by: Christoph Hellwig <hch@lst.de> OK, why not :). Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > block/blk-ioc.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/block/blk-ioc.c b/block/blk-ioc.c > index 1ba7cfedca2d9..cff0e3bdae53c 100644 > --- a/block/blk-ioc.c > +++ b/block/blk-ioc.c > @@ -291,12 +291,18 @@ int set_task_ioprio(struct task_struct *task, int ioprio) > struct io_context *ioc; > > task_unlock(task); > - ioc = create_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE); > - if (ioc) { > - ioc->ioprio = ioprio; > - put_io_context(ioc); > + > + ioc = alloc_io_context(GFP_ATOMIC, NUMA_NO_NODE); > + if (!ioc) > + return -ENOMEM; > + > + task_lock(task); > + if (task->io_context || (task->flags & PF_EXITING)) { > + kmem_cache_free(iocontext_cachep, ioc); > + ioc = task->io_context; > + } else { > + task->io_context = ioc; > } > - return 0; > } > task->io_context->ioprio = ioprio; > task_unlock(task); > -- > 2.30.2 >
diff --git a/block/blk-ioc.c b/block/blk-ioc.c index 1ba7cfedca2d9..cff0e3bdae53c 100644 --- a/block/blk-ioc.c +++ b/block/blk-ioc.c @@ -291,12 +291,18 @@ int set_task_ioprio(struct task_struct *task, int ioprio) struct io_context *ioc; task_unlock(task); - ioc = create_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE); - if (ioc) { - ioc->ioprio = ioprio; - put_io_context(ioc); + + ioc = alloc_io_context(GFP_ATOMIC, NUMA_NO_NODE); + if (!ioc) + return -ENOMEM; + + task_lock(task); + if (task->io_context || (task->flags & PF_EXITING)) { + kmem_cache_free(iocontext_cachep, ioc); + ioc = task->io_context; + } else { + task->io_context = ioc; } - return 0; } task->io_context->ioprio = ioprio; task_unlock(task);
The flow in set_task_ioprio can be simplified by simply open coding create_task_io_context, which removes a refcount roundtrip on the I/O context. Signed-off-by: Christoph Hellwig <hch@lst.de> --- block/blk-ioc.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)