diff options
| -rw-r--r-- | drivers/md/md.c | 7 | ||||
| -rw-r--r-- | drivers/md/md.h | 2 | ||||
| -rw-r--r-- | drivers/md/raid1.c | 2 | ||||
| -rw-r--r-- | drivers/md/raid10.c | 2 | ||||
| -rw-r--r-- | drivers/md/raid5.c | 4 | 
5 files changed, 9 insertions, 8 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 85e6786653e..7564c44b804 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -4269,7 +4269,8 @@ static ssize_t  mismatch_cnt_show(struct mddev *mddev, char *page)  {  	return sprintf(page, "%llu\n", -		       (unsigned long long) mddev->resync_mismatches); +		       (unsigned long long) +		       atomic64_read(&mddev->resync_mismatches));  }  static struct md_sysfs_entry md_scan_mode = @@ -5235,7 +5236,7 @@ static void md_clean(struct mddev *mddev)  	mddev->new_layout = 0;  	mddev->new_chunk_sectors = 0;  	mddev->curr_resync = 0; -	mddev->resync_mismatches = 0; +	atomic64_set(&mddev->resync_mismatches, 0);  	mddev->suspend_lo = mddev->suspend_hi = 0;  	mddev->sync_speed_min = mddev->sync_speed_max = 0;  	mddev->recovery = 0; @@ -7357,7 +7358,7 @@ void md_do_sync(struct md_thread *thread)  		 * which defaults to physical size, but can be virtual size  		 */  		max_sectors = mddev->resync_max_sectors; -		mddev->resync_mismatches = 0; +		atomic64_set(&mddev->resync_mismatches, 0);  		/* we don't use the checkpoint if there's a bitmap */  		if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))  			j = mddev->resync_min; diff --git a/drivers/md/md.h b/drivers/md/md.h index 93ada214b50..af443ab868d 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -282,7 +282,7 @@ struct mddev {  	sector_t			resync_max_sectors; /* may be set by personality */ -	sector_t			resync_mismatches; /* count of sectors where +	atomic64_t			resync_mismatches; /* count of sectors where  							    * parity/replica mismatch found  							    */ diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index e913356b257..8034fbd6190 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1876,7 +1876,7 @@ static int process_checks(struct r1bio *r1_bio)  		} else  			j = 0;  		if (j >= 0) -			mddev->resync_mismatches += r1_bio->sectors; +			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))) {  			/* No need to write to this device. */ diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index fb5bd607e15..146749b277c 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -2011,7 +2011,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)  					break;  			if (j == vcnt)  				continue; -			mddev->resync_mismatches += r10_bio->sectors; +			atomic64_add(r10_bio->sectors, &mddev->resync_mismatches);  			if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery))  				/* Don't fix anything. */  				continue; diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index ab613efbbea..4cc6b0e398b 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -2973,7 +2973,7 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh,  			 */  			set_bit(STRIPE_INSYNC, &sh->state);  		else { -			conf->mddev->resync_mismatches += STRIPE_SECTORS; +			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); @@ -3125,7 +3125,7 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh,  				 */  			}  		} else { -			conf->mddev->resync_mismatches += STRIPE_SECTORS; +			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);  |