[Drbd-dev] [PATCH 04/23] block: Abstract out bvec iterator
NeilBrown
neilb at suse.de
Thu Oct 31 04:29:36 CET 2013
On Tue, 29 Oct 2013 13:17:57 -0700 Kent Overstreet <kmo at daterainc.com> wrote:
> Immutable biovecs are going to require an explicit iterator. To
> implement immutable bvecs, a later patch is going to add a bi_bvec_done
> member to this struct; for now, this patch effectively just renames
> things.
>
> Signed-off-by: Kent Overstreet <kmo at daterainc.com>
> diff --git a/Documentation/block/biodoc.txt b/Documentation/block/biodoc.txt
> index 8df5e8e..2101e71 100644
> --- a/Documentation/block/biodoc.txt
> +++ b/Documentation/block/biodoc.txt
> @@ -447,14 +447,13 @@ struct bio_vec {
> * main unit of I/O for the block layer and lower layers (ie drivers)
> */
> struct bio {
> - sector_t bi_sector;
> struct bio *bi_next; /* request queue link */
> struct block_device *bi_bdev; /* target device */
> unsigned long bi_flags; /* status, command, etc */
> unsigned long bi_rw; /* low bits: r/w, high: priority */
>
> unsigned int bi_vcnt; /* how may bio_vec's */
> - unsigned int bi_idx; /* current index into bio_vec array */
> + struct bvec_iter bi_iter; /* current index into bio_vec array */
>
> unsigned int bi_size; /* total size in bytes */
> unsigned short bi_phys_segments; /* segments after physaddr coalesce*/
> @@ -480,7 +479,7 @@ With this multipage bio design:
> - Code that traverses the req list can find all the segments of a bio
> by using rq_for_each_segment. This handles the fact that a request
> has multiple bios, each of which can have multiple segments.
> -- Drivers which can't process a large bio in one shot can use the bi_idx
> +- Drivers which can't process a large bio in one shot can use the bi_iter
> field to keep track of the next bio_vec entry to process.
> (e.g a 1MB bio_vec needs to be handled in max 128kB chunks for IDE)
> [TBD: Should preferably also have a bi_voffset and bi_vlen to avoid modifying
> @@ -589,7 +588,7 @@ driver should not modify these values. The block layer sets up the
> nr_sectors and current_nr_sectors fields (based on the corresponding
> hard_xxx values and the number of bytes transferred) and updates it on
> every transfer that invokes end_that_request_first. It does the same for the
> -buffer, bio, bio->bi_idx fields too.
> +buffer, bio, bio->bi_iter fields too.
>
> The buffer field is just a virtual address mapping of the current segment
> of the i/o buffer in cases where the buffer resides in low-memory. For high
Would it make sense to add some details of "bvec_iter" to this document?
Or will that come later?
NeilBrown
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 828 bytes
Desc: not available
URL: <http://lists.linbit.com/pipermail/drbd-dev/attachments/20131031/65c6a1ca/attachment.pgp>
More information about the drbd-dev
mailing list