md/raid5: factor out mark_uptodate from ops_complete_compute5
authorDan Williams <dan.j.williams@intel.com>
Sun, 30 Aug 2009 02:13:11 +0000 (19:13 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sun, 30 Aug 2009 02:13:11 +0000 (19:13 -0700)
ops_complete_compute5 can be reused in the raid6 path if it is updated to
generically handle a second target.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/md/raid5.c

index 1f2a266..e3a2990 100644 (file)
@@ -623,18 +623,29 @@ static void ops_run_biofill(struct stripe_head *sh)
        async_trigger_callback(&submit);
 }
 
+static void mark_target_uptodate(struct stripe_head *sh, int target)
+{
+       struct r5dev *tgt;
+
+       if (target < 0)
+               return;
+
+       tgt = &sh->dev[target];
+       set_bit(R5_UPTODATE, &tgt->flags);
+       BUG_ON(!test_bit(R5_Wantcompute, &tgt->flags));
+       clear_bit(R5_Wantcompute, &tgt->flags);
+}
+
 static void ops_complete_compute5(void *stripe_head_ref)
 {
        struct stripe_head *sh = stripe_head_ref;
-       int target = sh->ops.target;
-       struct r5dev *tgt = &sh->dev[target];
 
        pr_debug("%s: stripe %llu\n", __func__,
                (unsigned long long)sh->sector);
 
-       set_bit(R5_UPTODATE, &tgt->flags);
-       BUG_ON(!test_bit(R5_Wantcompute, &tgt->flags));
-       clear_bit(R5_Wantcompute, &tgt->flags);
+       /* mark the computed target as uptodate */
+       mark_target_uptodate(sh, sh->ops.target);
+
        clear_bit(STRIPE_COMPUTE_RUN, &sh->state);
        if (sh->check_state == check_state_compute_run)
                sh->check_state = check_state_compute_result;