• Dan Williams's avatar
    md: replace STRIPE_OP_CHECK with 'check_states' · ecc65c9b
    Dan Williams authored
    From: Dan Williams <dan.j.williams@intel.com>
    
    The STRIPE_OP_* flags record the state of stripe operations which are
    performed outside the stripe lock.  Their use in indicating which
    operations need to be run is straightforward; however, interpolating what
    the next state of the stripe should be based on a given combination of
    these flags is not straightforward, and has led to bugs.  An easier to read
    implementation with minimal degrees of freedom is needed.
    
    Towards this goal, this patch introduces explicit states to replace what was
    previously interpolated from the STRIPE_OP_* flags.  For now this only converts
    the handle_parity_checks5 path, removing a user of the
    ops.{pending,ack,complete,count} fields of struct stripe_operations.
    
    This conversion also found a remaining issue with the current code.  There is
    a small window for a drive to fail between when we schedule a repair and when
    the parity calculation for that repair completes.  When this happens we will
    writeback to 'failed_num' when we really want to write back to 'pd_idx'.
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarNeil Brown <neilb@suse.de>
    ecc65c9b
raid5.c 135 KB