• Dan Williams's avatar
    raid5: fix 2 bugs in ops_complete_biofill · e4d84909
    Dan Williams authored
    1/ ops_complete_biofill tried to avoid calling handle_stripe since all the
    state necessary to return read completions is available.  However the
    process of determining whether more read requests are pending requires
    locking the stripe (to block add_stripe_bio from updating dev->toead).
    ops_complete_biofill can run in tasklet context, so rather than upgrading
    all the stripe locks from spin_lock to spin_lock_bh this patch just
    unconditionally reschedules handle_stripe after completing the read
    request.
    
    2/ ops_complete_biofill needlessly qualified processing R5_Wantfill with
    dev->toread.  The result being that the 'biofill' pending bit is cleared
    before handling the pending read-completions on dev->read.  R5_Wantfill can
    be unconditionally handled because the 'biofill' pending bit prevents new
    R5_Wantfill requests from being seen by ops_run_biofill and
    ops_complete_biofill.
    Found-by: default avatarYuri Tikhonov <yur@emcraft.com>
    [neilb@suse.de: simpler fix for bug 1 than moving code]
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    e4d84909
raid5.c 134 KB