lkml.org 
[lkml]   [2012]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch v2 1/6] block: makes bio_split support bio without data
    discard bio hasn't data attached. We hit a BUG_ON with such bio. This makes
    bio_split works for such bio.

    Signed-off-by: Shaohua Li <shli@fusionio.com>
    ---
    fs/bio.c | 22 ++++++++++++----------
    1 file changed, 12 insertions(+), 10 deletions(-)

    Index: linux/fs/bio.c
    ===================================================================
    --- linux.orig/fs/bio.c 2012-03-09 16:56:41.203790008 +0800
    +++ linux/fs/bio.c 2012-03-12 10:10:40.696612399 +0800
    @@ -1492,7 +1492,7 @@ struct bio_pair *bio_split(struct bio *b
    trace_block_split(bdev_get_queue(bi->bi_bdev), bi,
    bi->bi_sector + first_sectors);

    - BUG_ON(bi->bi_vcnt != 1);
    + BUG_ON(bi->bi_vcnt != 1 && bi->bi_vcnt != 0);
    BUG_ON(bi->bi_idx != 0);
    atomic_set(&bp->cnt, 3);
    bp->error = 0;
    @@ -1502,17 +1502,19 @@ struct bio_pair *bio_split(struct bio *b
    bp->bio2.bi_size -= first_sectors << 9;
    bp->bio1.bi_size = first_sectors << 9;

    - bp->bv1 = bi->bi_io_vec[0];
    - bp->bv2 = bi->bi_io_vec[0];
    - bp->bv2.bv_offset += first_sectors << 9;
    - bp->bv2.bv_len -= first_sectors << 9;
    - bp->bv1.bv_len = first_sectors << 9;
    + if (bi->bi_vcnt != 0) {
    + bp->bv1 = bi->bi_io_vec[0];
    + bp->bv2 = bi->bi_io_vec[0];
    + bp->bv2.bv_offset += first_sectors << 9;
    + bp->bv2.bv_len -= first_sectors << 9;
    + bp->bv1.bv_len = first_sectors << 9;

    - bp->bio1.bi_io_vec = &bp->bv1;
    - bp->bio2.bi_io_vec = &bp->bv2;
    + bp->bio1.bi_io_vec = &bp->bv1;
    + bp->bio2.bi_io_vec = &bp->bv2;

    - bp->bio1.bi_max_vecs = 1;
    - bp->bio2.bi_max_vecs = 1;
    + bp->bio1.bi_max_vecs = 1;
    + bp->bio2.bi_max_vecs = 1;
    + }

    bp->bio1.bi_end_io = bio_pair_end_1;
    bp->bio2.bi_end_io = bio_pair_end_2;


    \
     
     \ /
      Last update: 2012-03-16 08:37    [W:0.020 / U:328.880 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site