[PATCH] MD: Do not increment resync_mismatches unless MD_RECOVERY_REQUESTED

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



MD:  Do not increment resync_mismatches unless MD_RECOVERY_REQUESTED

resync_mismatches is used to display the number of differences that
have been found or repaired during a scrubbing operation.  It is not
meant to count anything during resync or repair operations.  (How
much sense does it make to find resync_mismatches populated after an
initial synchronization of the array?  After cleaning-up an unclean
shutdown?  After [re]integrating a device into an existing array?)
The incrementing of the variable must be restricted to when the user
initiates a scrubbing operation (i.e. "check" or "repair").

Signed-off-by: Jonathan Brassow <jbrassow@xxxxxxxxxx>

Index: linux-upstream/drivers/md/raid1.c
===================================================================
--- linux-upstream.orig/drivers/md/raid1.c
+++ linux-upstream/drivers/md/raid1.c
@@ -1878,7 +1878,8 @@ static int process_checks(struct r1bio *
 			}
 		} else
 			j = 0;
-		if (j >= 0)
+		if ((j >= 0) &&
+		    (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)))
 			atomic64_add(r1_bio->sectors, &mddev->resync_mismatches);
 		if (j < 0 || (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)
 			      && test_bit(BIO_UPTODATE, &sbio->bi_flags))) {
Index: linux-upstream/drivers/md/raid10.c
===================================================================
--- linux-upstream.orig/drivers/md/raid10.c
+++ linux-upstream/drivers/md/raid10.c
@@ -2071,7 +2071,10 @@ static void sync_request_write(struct md
 					break;
 			if (j == vcnt)
 				continue;
-			atomic64_add(r10_bio->sectors, &mddev->resync_mismatches);
+
+			if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
+				atomic64_add(r10_bio->sectors,
+					     &mddev->resync_mismatches);
 			if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery))
 				/* Don't fix anything. */
 				continue;
Index: linux-upstream/drivers/md/raid5.c
===================================================================
--- linux-upstream.orig/drivers/md/raid5.c
+++ linux-upstream/drivers/md/raid5.c
@@ -2989,7 +2989,10 @@ static void handle_parity_checks5(struct
 			 */
 			set_bit(STRIPE_INSYNC, &sh->state);
 		else {
-			atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
+			if (test_bit(MD_RECOVERY_REQUESTED,
+				     &conf->mddev->recovery))
+				atomic64_add(STRIPE_SECTORS,
+					     &conf->mddev->resync_mismatches);
 			if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
 				/* don't try to repair!! */
 				set_bit(STRIPE_INSYNC, &sh->state);
@@ -3141,7 +3144,10 @@ static void handle_parity_checks6(struct
 				 */
 			}
 		} else {
-			atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
+			if (test_bit(MD_RECOVERY_REQUESTED,
+				     &conf->mddev->recovery))
+				atomic64_add(STRIPE_SECTORS,
+					     &conf->mddev->resync_mismatches);
 			if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
 				/* don't try to repair!! */
 				set_bit(STRIPE_INSYNC, &sh->state);


--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux