• NeilBrown's avatar
    md/raid5: remove over-loading of ->bi_phys_segments. · 0472a42b
    NeilBrown authored
    When a read request, which bypassed the cache, fails, we need to retry
    it through the cache.
    This involves attaching it to a sequence of stripe_heads, and it may not
    be possible to get all the stripe_heads we need at once.
    We do what we can, and record how far we got in ->bi_phys_segments so
    we can pick up again later.
    
    There is only ever one bio which may have a non-zero offset stored in
    ->bi_phys_segments, the one that is either active in the single thread
    which calls retry_aligned_read(), or is in conf->retry_read_aligned
    waiting for retry_aligned_read() to be called again.
    
    So we only need to store one offset value.  This can be in a local
    variable passed between remove_bio_from_retry() and
    retry_aligned_read(), or in the r5conf structure next to the
    ->retry_read_aligned pointer.
    
    Storing it there allows the last usage of ->bi_phys_segments to be
    removed from md/raid5.c.
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    0472a42b
raid5.c 237 KB