On Tue, 29 Oct 2013 13:17:57 -0700 Kent Overstreet <kmo@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> > 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
Attachment:
signature.asc
Description: PGP signature
-- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel