[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