[dm-devel] [PATCH 4/4] dm: support I/O polling
Mikulas Patocka
mpatocka at redhat.com
Thu Mar 4 10:09:24 UTC 2021
On Thu, 4 Mar 2021, JeffleXu wrote:
> > __split_and_process_non_flush records the poll cookie in ci.poll_cookie.
> > When we processed all the bios, we poll for the last cookie here:
> >
> > if (ci.poll_cookie != BLK_QC_T_NONE) {
> > while (atomic_read(&ci.io->io_count) > 1 &&
> > blk_poll(ci.poll_queue, ci.poll_cookie, true)) ;
> > }
>
> So what will happen if one bio submitted to dm device crosses the device
> boundary among several target devices (e.g., dm-stripe)? Please refer
> the following call graph.
>
> ```
> submit_bio
> __submit_bio_noacct
> disk->fops->submit_bio(), calling into __split_and_process_bio(),
> call __split_and_process_non_flush() once, submitting the *first* split bio
> disk->fops->submit_bio(), calling into __split_and_process_bio(),
> call __split_and_process_non_flush() once, submitting the *second* split bio
> ...
> ```
>
>
> So the loop is in __submit_bio_noacct(), rather than
> __split_and_process_bio(). Your design will send the first split bio,
> and then poll on this split bio, then send the next split bio, polling
> on this, go on and on...
No. It will send all the bios and poll for the last one.
Mikulas
More information about the dm-devel
mailing list