linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] md/raid10: remove unnecessary checks with 'first'
@ 2017-04-01  3:38 Guoqing Jiang
  2017-04-03  2:21 ` NeilBrown
  2017-04-06  1:12 ` [PATCH V2] md/raid10: reset the 'first' at the end of loop Guoqing Jiang
  0 siblings, 2 replies; 5+ messages in thread
From: Guoqing Jiang @ 2017-04-01  3:38 UTC (permalink / raw)
  To: linux-raid; +Cc: shli, neilb

Since the value of first is always '1', we can
set min_offset_diff directly.

Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
---
 drivers/md/raid10.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 0f13d57..edaf8f4 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -3702,7 +3702,6 @@ static int raid10_run(struct mddev *mddev)
 	struct md_rdev *rdev;
 	sector_t size;
 	sector_t min_offset_diff = 0;
-	int first = 1;
 	bool discard_supported = false;
 
 	if (mddev->private == NULL) {
@@ -3758,8 +3757,7 @@ static int raid10_run(struct mddev *mddev)
 			diff = -diff;
 		if (diff < 0)
 			diff = 0;
-		if (first || diff < min_offset_diff)
-			min_offset_diff = diff;
+		min_offset_diff = diff;
 
 		if (mddev->gendisk)
 			disk_stack_limits(mddev->gendisk, rdev->bdev,
@@ -4140,7 +4138,6 @@ static int raid10_start_reshape(struct mddev *mddev)
 
 	unsigned long before_length, after_length;
 	sector_t min_offset_diff = 0;
-	int first = 1;
 	struct geom new;
 	struct r10conf *conf = mddev->private;
 	struct md_rdev *rdev;
@@ -4169,8 +4166,7 @@ static int raid10_start_reshape(struct mddev *mddev)
 				diff = -diff;
 			if (diff < 0)
 				diff = 0;
-			if (first || diff < min_offset_diff)
-				min_offset_diff = diff;
+			min_offset_diff = diff;
 		}
 	}
 
-- 
2.6.6


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] md/raid10: remove unnecessary checks with 'first'
  2017-04-01  3:38 [PATCH] md/raid10: remove unnecessary checks with 'first' Guoqing Jiang
@ 2017-04-03  2:21 ` NeilBrown
  2017-04-06  1:12 ` [PATCH V2] md/raid10: reset the 'first' at the end of loop Guoqing Jiang
  1 sibling, 0 replies; 5+ messages in thread
From: NeilBrown @ 2017-04-03  2:21 UTC (permalink / raw)
  To: Guoqing Jiang, linux-raid; +Cc: shli

[-- Attachment #1: Type: text/plain, Size: 1890 bytes --]

On Sat, Apr 01 2017, Guoqing Jiang wrote:

> Since the value of first is always '1', we can
> set min_offset_diff directly.

Alternately, maybe the fact that first is always '1', is a sign of a bug
that should be fixed.

The calculation of "min_offset_diff" doesn't make much sense now.  It is
just the last_offset_diff.

I think the correct fix is to set "first = 0;" at the end of the
rdev_for_each() loop.

Thanks for spotting this.

NeilBrown

>
> Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
> ---
>  drivers/md/raid10.c | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index 0f13d57..edaf8f4 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -3702,7 +3702,6 @@ static int raid10_run(struct mddev *mddev)
>  	struct md_rdev *rdev;
>  	sector_t size;
>  	sector_t min_offset_diff = 0;
> -	int first = 1;
>  	bool discard_supported = false;
>  
>  	if (mddev->private == NULL) {
> @@ -3758,8 +3757,7 @@ static int raid10_run(struct mddev *mddev)
>  			diff = -diff;
>  		if (diff < 0)
>  			diff = 0;
> -		if (first || diff < min_offset_diff)
> -			min_offset_diff = diff;
> +		min_offset_diff = diff;
>  
>  		if (mddev->gendisk)
>  			disk_stack_limits(mddev->gendisk, rdev->bdev,
> @@ -4140,7 +4138,6 @@ static int raid10_start_reshape(struct mddev *mddev)
>  
>  	unsigned long before_length, after_length;
>  	sector_t min_offset_diff = 0;
> -	int first = 1;
>  	struct geom new;
>  	struct r10conf *conf = mddev->private;
>  	struct md_rdev *rdev;
> @@ -4169,8 +4166,7 @@ static int raid10_start_reshape(struct mddev *mddev)
>  				diff = -diff;
>  			if (diff < 0)
>  				diff = 0;
> -			if (first || diff < min_offset_diff)
> -				min_offset_diff = diff;
> +			min_offset_diff = diff;
>  		}
>  	}
>  
> -- 
> 2.6.6

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH V2] md/raid10: reset the 'first' at the end of loop
  2017-04-01  3:38 [PATCH] md/raid10: remove unnecessary checks with 'first' Guoqing Jiang
  2017-04-03  2:21 ` NeilBrown
@ 2017-04-06  1:12 ` Guoqing Jiang
  2017-04-06  2:27   ` NeilBrown
  2017-04-10 17:41   ` Shaohua Li
  1 sibling, 2 replies; 5+ messages in thread
From: Guoqing Jiang @ 2017-04-06  1:12 UTC (permalink / raw)
  To: linux-raid; +Cc: shli, neilb

We need to set "first = 0' at the end of rdev_for_each
loop, so we can get the array's min_offset_diff correctly
otherwise min_offset_diff just means the last rdev's
offset diff.

Suggested-by: NeilBrown <neilb@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
---
 drivers/md/raid10.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 0f13d57..e055ec9 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -3769,6 +3769,7 @@ static int raid10_run(struct mddev *mddev)
 
 		if (blk_queue_discard(bdev_get_queue(rdev->bdev)))
 			discard_supported = true;
+		first = 0;
 	}
 
 	if (mddev->queue) {
@@ -4172,6 +4173,7 @@ static int raid10_start_reshape(struct mddev *mddev)
 			if (first || diff < min_offset_diff)
 				min_offset_diff = diff;
 		}
+		first = 0;
 	}
 
 	if (max(before_length, after_length) > min_offset_diff)
-- 
2.6.6


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] md/raid10: reset the 'first' at the end of loop
  2017-04-06  1:12 ` [PATCH V2] md/raid10: reset the 'first' at the end of loop Guoqing Jiang
@ 2017-04-06  2:27   ` NeilBrown
  2017-04-10 17:41   ` Shaohua Li
  1 sibling, 0 replies; 5+ messages in thread
From: NeilBrown @ 2017-04-06  2:27 UTC (permalink / raw)
  To: Guoqing Jiang, linux-raid; +Cc: shli

[-- Attachment #1: Type: text/plain, Size: 1112 bytes --]

On Thu, Apr 06 2017, Guoqing Jiang wrote:

> We need to set "first = 0' at the end of rdev_for_each
> loop, so we can get the array's min_offset_diff correctly
> otherwise min_offset_diff just means the last rdev's
> offset diff.
>
> Suggested-by: NeilBrown <neilb@suse.com>
> Signed-off-by: Guoqing Jiang <gqjiang@suse.com>

Reviewed-by: NeilBrown <neilb@suse.com>

Thanks,
NeilBrown

> ---
>  drivers/md/raid10.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index 0f13d57..e055ec9 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -3769,6 +3769,7 @@ static int raid10_run(struct mddev *mddev)
>  
>  		if (blk_queue_discard(bdev_get_queue(rdev->bdev)))
>  			discard_supported = true;
> +		first = 0;
>  	}
>  
>  	if (mddev->queue) {
> @@ -4172,6 +4173,7 @@ static int raid10_start_reshape(struct mddev *mddev)
>  			if (first || diff < min_offset_diff)
>  				min_offset_diff = diff;
>  		}
> +		first = 0;
>  	}
>  
>  	if (max(before_length, after_length) > min_offset_diff)
> -- 
> 2.6.6

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] md/raid10: reset the 'first' at the end of loop
  2017-04-06  1:12 ` [PATCH V2] md/raid10: reset the 'first' at the end of loop Guoqing Jiang
  2017-04-06  2:27   ` NeilBrown
@ 2017-04-10 17:41   ` Shaohua Li
  1 sibling, 0 replies; 5+ messages in thread
From: Shaohua Li @ 2017-04-10 17:41 UTC (permalink / raw)
  To: Guoqing Jiang; +Cc: linux-raid, shli, neilb

On Thu, Apr 06, 2017 at 09:12:18AM +0800, Guoqing Jiang wrote:
> We need to set "first = 0' at the end of rdev_for_each
> loop, so we can get the array's min_offset_diff correctly
> otherwise min_offset_diff just means the last rdev's
> offset diff.
> 
> Suggested-by: NeilBrown <neilb@suse.com>
> Signed-off-by: Guoqing Jiang <gqjiang@suse.com>

applied, thanks!

> ---
>  drivers/md/raid10.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index 0f13d57..e055ec9 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -3769,6 +3769,7 @@ static int raid10_run(struct mddev *mddev)
>  
>  		if (blk_queue_discard(bdev_get_queue(rdev->bdev)))
>  			discard_supported = true;
> +		first = 0;
>  	}
>  
>  	if (mddev->queue) {
> @@ -4172,6 +4173,7 @@ static int raid10_start_reshape(struct mddev *mddev)
>  			if (first || diff < min_offset_diff)
>  				min_offset_diff = diff;
>  		}
> +		first = 0;
>  	}
>  
>  	if (max(before_length, after_length) > min_offset_diff)
> -- 
> 2.6.6
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-04-10 17:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-01  3:38 [PATCH] md/raid10: remove unnecessary checks with 'first' Guoqing Jiang
2017-04-03  2:21 ` NeilBrown
2017-04-06  1:12 ` [PATCH V2] md/raid10: reset the 'first' at the end of loop Guoqing Jiang
2017-04-06  2:27   ` NeilBrown
2017-04-10 17:41   ` Shaohua Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).