Skip to content
  • NeilBrown's avatar
    md/raid5: use bio_inc_remaining() instead of repurposing bi_phys_segments as a counter · 016c76ac
    NeilBrown authored
    
    
    md/raid5 needs to keep track of how many stripe_heads are processing a
    bio so that it can delay calling bio_endio() until all stripe_heads
    have completed.  It currently uses 16 bits of ->bi_phys_segments for
    this purpose.
    
    16 bits is only enough for 256M requests, and it is possible for a
    single bio to be larger than this, which causes problems.  Also, the
    bio struct contains a larger counter, __bi_remaining, which has a
    purpose very similar to the purpose of our counter.  So stop using
    ->bi_phys_segments, and instead use __bi_remaining.
    
    This means we don't need to initialize the counter, as our caller
    initializes it to '1'.  It also means we can call bio_endio() directly
    as it tests this counter internally.
    
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    016c76ac