• Ming Lei's avatar
    block: introduce multi-page bvec helpers · 3d75ca0a
    Ming Lei authored
    This patch introduces helpers of 'mp_bvec_iter_*' for multi-page bvec
    support.
    
    The introduced helpers treate one bvec as real multi-page segment,
    which may include more than one pages.
    
    The existed helpers of bvec_iter_* are interfaces for supporting current
    bvec iterator which is thought as single-page by drivers, fs, dm and
    etc. These introduced helpers will build single-page bvec in flight, so
    this way won't break current bio/bvec users, which needn't any change.
    
    Follows some multi-page bvec background:
    
    - bvecs stored in bio->bi_io_vec is always multi-page style
    
    - bvec(struct bio_vec) represents one physically contiguous I/O
      buffer, now the buffer may include more than one page after
      multi-page bvec is supported, and all these pages represented
      by one bvec is physically contiguous. Before multi-page bvec
      support, at most one page is included in one bvec, we call it
      single-page bvec.
    
    - .bv_page of the bvec points to the 1st page in the multi-page bvec
    
    - .bv_offset of the bvec is the offset of the buffer in the bvec
    
    The effect on the current drivers/filesystem/dm/bcache/...:
    
    - almost everyone supposes that one bvec only includes one single
      page, so we keep the sp interface not changed, for example,
      bio_for_each_segment() still returns single-page bvec
    
    - bio_for_each_segment_all() will return single-page bvec too
    
    - during iterating, iterator variable(struct bvec_iter) is always
      updated in multi-page bvec style, and bvec_iter_advance() is kept
      not changed
    
    - returned(copied) single-page bvec is built in flight by bvec
      helpers from the stored multi-page bvec
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    3d75ca0a
bvec.h 3.79 KB