[dm-devel] [PATCH V5 08/12] block: use per-task poll context to implement bio based io polling
Christoph Hellwig
hch at infradead.org
Mon Apr 12 10:16:59 UTC 2021
> +static int blk_bio_poll_io(struct io_context *submit_ioc,
> + struct io_context *poll_ioc)
Givem that poll_ioc is always current->io_context there is no
need to pass it.
> + struct blk_bio_poll_ctx *poll_ctx = poll_ioc ?
> + poll_ioc->data : NULL;
and it really should not be NULL here, should it?
> +static int __blk_bio_poll(blk_qc_t cookie)
> +{
> + struct io_context *poll_ioc = current->io_context;
> + pid_t pid;
> + struct task_struct *submit_task;
> + int ret;
> +
> + pid = (pid_t)cookie;
> +
> + /* io poll often share io submission context */
> + if (likely(current->pid == pid && blk_bio_ioc_valid(current)))
> + return blk_bio_poll_io(poll_ioc, poll_ioc);
> +
> + submit_task = find_get_task_by_vpid(pid);
> + if (likely(blk_bio_ioc_valid(submit_task)))
> + ret = blk_bio_poll_io(submit_task->io_context, poll_ioc);
> + else
> + ret = 0;
> + if (likely(submit_task))
> + put_task_struct(submit_task);
Wouldn't it make more sense to just store the submitting context
in the bio, even if that uses more space? Having to call
find_get_task_by_vpid in the poll context seems rather problematic.
Note that this requires doing the refacoring to get rid of the separate
blk_qc_t passed up the stack I asked for earlier, but hiding all these
details seems like a really useful change anyway.
More information about the dm-devel
mailing list