lkml.org 
[lkml]   [2018]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 146/195] Btrfs: raid56: iterate raid56 internal bio with bio_for_each_segment_all
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Liu Bo <bo.li.liu@oracle.com>

    commit 0198e5b707cfeb5defbd1b71b1ec6e71580d7db9 upstream.

    Bio iterated by set_bio_pages_uptodate() is raid56 internal one, so it
    will never be a BIO_CLONED bio, and since this is called by end_io
    functions, bio->bi_iter.bi_size is zero, we mustn't use
    bio_for_each_segment() as that is a no-op if bi_size is zero.

    Fixes: 6592e58c6b68e61f003a01ba29a3716e7e2e9484 ("Btrfs: fix write corruption due to bio cloning on raid5/6")
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/btrfs/raid56.c | 11 +++++------
    1 file changed, 5 insertions(+), 6 deletions(-)

    --- a/fs/btrfs/raid56.c
    +++ b/fs/btrfs/raid56.c
    @@ -1432,14 +1432,13 @@ static int fail_bio_stripe(struct btrfs_
    */
    static void set_bio_pages_uptodate(struct bio *bio)
    {
    - struct bio_vec bvec;
    - struct bvec_iter iter;
    + struct bio_vec *bvec;
    + int i;

    - if (bio_flagged(bio, BIO_CLONED))
    - bio->bi_iter = btrfs_io_bio(bio)->iter;
    + ASSERT(!bio_flagged(bio, BIO_CLONED));

    - bio_for_each_segment(bvec, bio, iter)
    - SetPageUptodate(bvec.bv_page);
    + bio_for_each_segment_all(bvec, bio, i)
    + SetPageUptodate(bvec->bv_page);
    }

    /*

    \
     
     \ /
      Last update: 2018-02-15 18:18    [W:2.111 / U:0.556 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site