* [PATCH v4 0/2] md_cluster: bugs fix
@ 2020-07-19 11:08 Zhao Heming
2020-07-19 11:08 ` [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap Zhao Heming
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Zhao Heming @ 2020-07-19 11:08 UTC (permalink / raw)
To: linux-raid; +Cc: Zhao Heming, neilb, jes
v4:
- add new patch 'fix rmmod issue when md_cluster convert bitmap to none'
- add cover leter
- modify both patches comments.
v3:
- add restoring path for error case
- modify comments
v2:
- change setting path from location_store to md_setup_cluster
- add restoring path
v1:
- create: fix safemode_delay value when converting to clustered bitmap
Zhao Heming (2):
md-cluster: fix safemode_delay value when converting to clustered
bitmap
md-cluster: fix rmmod issue when md_cluster convert bitmap to none
drivers/md/md.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
--
2.25.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap
2020-07-19 11:08 [PATCH v4 0/2] md_cluster: bugs fix Zhao Heming
@ 2020-07-19 11:08 ` Zhao Heming
2020-07-19 23:24 ` NeilBrown
2020-07-19 11:08 ` [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none Zhao Heming
2020-07-19 13:46 ` [PATCH v4 0/2] md_cluster: bugs fix heming.zhao
2 siblings, 1 reply; 8+ messages in thread
From: Zhao Heming @ 2020-07-19 11:08 UTC (permalink / raw)
To: linux-raid; +Cc: Zhao Heming, neilb, jes
When array convert to clustered bitmap, the safe_mode_delay doesn't clean and vice versa.
the /sys/block/mdX/md/safe_mode_delay keep original value after changing bitmap type.
in safe_delay_store(), the code forbids setting mddev->safemode_delay when array is clustered.
So in cluster-md env, the expected safemode_delay value should be 0.
reproduction steps:
```
node1 # mdadm --zero-superblock /dev/sd{b,c,d}
node1 # mdadm -C /dev/md0 -b internal -e 1.2 -n 2 -l mirror /dev/sdb /dev/sdc
node1 # cat /sys/block/md0/md/safe_mode_delay
0.204
node1 # mdadm -G /dev/md0 -b none
node1 # mdadm --grow /dev/md0 --bitmap=clustered
node1 # cat /sys/block/md0/md/safe_mode_delay
0.204 <== doesn't change, should ZERO for cluster-md
node1 # mdadm --zero-superblock /dev/sd{b,c,d}
node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sdb /dev/sdc
node1 # cat /sys/block/md0/md/safe_mode_delay
0.000
node1 # mdadm -G /dev/md0 -b none
node1 # cat /sys/block/md0/md/safe_mode_delay
0.000 <== doesn't change, should default value
```
md_setup_cluster() is a good place for setting, but md_cluster_stop is
good for clean job when md_setup_cluster return err.
see below flow:
(user space)
mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
mdadm --grow /dev/md0 -b none
(kernel space)
SET_ARRAY_INFO
update_array_info
+ mddev->bitmap_info.nodes = 0;
+ md_cluster_ops->leave(mddev)
+ md_bitmap_destroy
md_bitmap_free //won't trigger md_cluster_stop() because above set 0.
Signed-off-by: Zhao Heming <heming.zhao@suse.com>
---
drivers/md/md.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index f567f536b529..e20f1d5a5261 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -101,6 +101,8 @@ static void mddev_detach(struct mddev *mddev);
* count by 2 for every hour elapsed between read errors.
*/
#define MD_DEFAULT_MAX_CORRECTED_READ_ERRORS 20
+/* Default safemode delay: 200 msec */
+#define DEFAULT_SAFEMODE_DELAY ((200 * HZ)/1000 +1)
/*
* Current RAID-1,4,5 parallel reconstruction 'guaranteed speed limit'
* is 1000 KB/sec, so the extra system load does not show up that much.
@@ -5982,7 +5984,7 @@ int md_run(struct mddev *mddev)
if (mddev_is_clustered(mddev))
mddev->safemode_delay = 0;
else
- mddev->safemode_delay = (200 * HZ)/1000 +1; /* 200 msec delay */
+ mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
mddev->in_sync = 1;
smp_wmb();
spin_lock(&mddev->lock);
@@ -7361,6 +7363,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
mddev->bitmap_info.nodes = 0;
md_cluster_ops->leave(mddev);
+ mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
}
mddev_suspend(mddev);
md_bitmap_destroy(mddev);
@@ -8366,6 +8369,7 @@ int md_setup_cluster(struct mddev *mddev, int nodes)
}
spin_unlock(&pers_lock);
+ mddev->safemode_delay = 0;
return md_cluster_ops->join(mddev, nodes);
}
@@ -8375,6 +8379,7 @@ void md_cluster_stop(struct mddev *mddev)
return;
md_cluster_ops->leave(mddev);
module_put(md_cluster_mod);
+ mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
}
static int is_mddev_idle(struct mddev *mddev, int init)
--
2.25.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none
2020-07-19 11:08 [PATCH v4 0/2] md_cluster: bugs fix Zhao Heming
2020-07-19 11:08 ` [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap Zhao Heming
@ 2020-07-19 11:08 ` Zhao Heming
2020-07-19 23:26 ` NeilBrown
2020-07-19 13:46 ` [PATCH v4 0/2] md_cluster: bugs fix heming.zhao
2 siblings, 1 reply; 8+ messages in thread
From: Zhao Heming @ 2020-07-19 11:08 UTC (permalink / raw)
To: linux-raid; +Cc: Zhao Heming, neilb, jes
update_array_info misses calling module_put when removing cluster bitmap.
steps to reproduce:
```
node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda
/dev/sdb
mdadm: array /dev/md0 started.
node1 # lsmod | egrep "dlm|md_|raid1"
md_cluster 28672 1
dlm 212992 14 md_cluster
configfs 57344 2 dlm
raid1 53248 1
md_mod 176128 2 raid1,md_cluster
node1 # mdadm -G /dev/md0 -b none
node1 # lsmod | egrep "dlm|md_|raid1"
md_cluster 28672 1 <== should be zero
dlm 212992 9 md_cluster
configfs 57344 2 dlm
raid1 53248 1
md_mod 176128 2 raid1,md_cluster
node1 # mdadm -G /dev/md0 -b clustered
node1 # lsmod | egrep "dlm|md_|raid1"
md_cluster 28672 2 <== increase
dlm 212992 14 md_cluster
configfs 57344 2 dlm
raid1 53248 1
md_mod 176128 2 raid1,md_cluster
node1 # mdadm -G /dev/md0 -b none
node1 # mdadm -G /dev/md0 -b clustered
node1 # lsmod | egrep "dlm|md_|raid1"
md_cluster 28672 3 <== increase
dlm 212992 14 md_cluster
configfs 57344 2 dlm
raid1 53248 1
md_mod 176128 2 raid1,md_cluster
```
Signed-off-by: Zhao Heming <heming.zhao@suse.com>
---
drivers/md/md.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index e20f1d5a5261..ca791387e54d 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -7363,6 +7363,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
mddev->bitmap_info.nodes = 0;
md_cluster_ops->leave(mddev);
+ module_put(md_cluster_mod);
mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
}
mddev_suspend(mddev);
--
2.25.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 0/2] md_cluster: bugs fix
2020-07-19 11:08 [PATCH v4 0/2] md_cluster: bugs fix Zhao Heming
2020-07-19 11:08 ` [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap Zhao Heming
2020-07-19 11:08 ` [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none Zhao Heming
@ 2020-07-19 13:46 ` heming.zhao
2 siblings, 0 replies; 8+ messages in thread
From: heming.zhao @ 2020-07-19 13:46 UTC (permalink / raw)
To: linux-raid; +Cc: neilb, jes, Song Liu
Very sorry, I mistakenly added Jes, CC Song in this mail.
Jes, please ignore these patches, sorry for CC you.
On 7/19/20 7:08 PM, Zhao Heming wrote:
> v4:
> - add new patch 'fix rmmod issue when md_cluster convert bitmap to none'
> - add cover leter
> - modify both patches comments.
>
> v3:
> - add restoring path for error case
> - modify comments
>
> v2:
> - change setting path from location_store to md_setup_cluster
> - add restoring path
>
> v1:
> - create: fix safemode_delay value when converting to clustered bitmap
>
> Zhao Heming (2):
> md-cluster: fix safemode_delay value when converting to clustered
> bitmap
> md-cluster: fix rmmod issue when md_cluster convert bitmap to none
>
> drivers/md/md.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap
2020-07-19 11:08 ` [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap Zhao Heming
@ 2020-07-19 23:24 ` NeilBrown
2020-07-20 16:03 ` heming.zhao
0 siblings, 1 reply; 8+ messages in thread
From: NeilBrown @ 2020-07-19 23:24 UTC (permalink / raw)
To: linux-raid; +Cc: Zhao Heming, neilb, jes
[-- Attachment #1: Type: text/plain, Size: 3649 bytes --]
On Sun, Jul 19 2020, Zhao Heming wrote:
> When array convert to clustered bitmap, the safe_mode_delay doesn't clean and vice versa.
> the /sys/block/mdX/md/safe_mode_delay keep original value after changing bitmap type.
> in safe_delay_store(), the code forbids setting mddev->safemode_delay when array is clustered.
> So in cluster-md env, the expected safemode_delay value should be 0.
>
> reproduction steps:
> ```
> node1 # mdadm --zero-superblock /dev/sd{b,c,d}
> node1 # mdadm -C /dev/md0 -b internal -e 1.2 -n 2 -l mirror /dev/sdb /dev/sdc
> node1 # cat /sys/block/md0/md/safe_mode_delay
> 0.204
> node1 # mdadm -G /dev/md0 -b none
> node1 # mdadm --grow /dev/md0 --bitmap=clustered
> node1 # cat /sys/block/md0/md/safe_mode_delay
> 0.204 <== doesn't change, should ZERO for cluster-md
>
> node1 # mdadm --zero-superblock /dev/sd{b,c,d}
> node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sdb /dev/sdc
> node1 # cat /sys/block/md0/md/safe_mode_delay
> 0.000
> node1 # mdadm -G /dev/md0 -b none
> node1 # cat /sys/block/md0/md/safe_mode_delay
> 0.000 <== doesn't change, should default value
> ```
>
> md_setup_cluster() is a good place for setting, but md_cluster_stop is
> good for clean job when md_setup_cluster return err.
>
> see below flow:
> (user space)
> mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
> mdadm --grow /dev/md0 -b none
> (kernel space)
> SET_ARRAY_INFO
> update_array_info
> + mddev->bitmap_info.nodes = 0;
> + md_cluster_ops->leave(mddev)
> + md_bitmap_destroy
> md_bitmap_free //won't trigger md_cluster_stop() because above set 0.
>
> Signed-off-by: Zhao Heming <heming.zhao@suse.com>
> ---
> drivers/md/md.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index f567f536b529..e20f1d5a5261 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -101,6 +101,8 @@ static void mddev_detach(struct mddev *mddev);
> * count by 2 for every hour elapsed between read errors.
> */
> #define MD_DEFAULT_MAX_CORRECTED_READ_ERRORS 20
> +/* Default safemode delay: 200 msec */
> +#define DEFAULT_SAFEMODE_DELAY ((200 * HZ)/1000 +1)
> /*
> * Current RAID-1,4,5 parallel reconstruction 'guaranteed speed limit'
> * is 1000 KB/sec, so the extra system load does not show up that much.
> @@ -5982,7 +5984,7 @@ int md_run(struct mddev *mddev)
> if (mddev_is_clustered(mddev))
> mddev->safemode_delay = 0;
> else
> - mddev->safemode_delay = (200 * HZ)/1000 +1; /* 200 msec delay */
> + mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
> mddev->in_sync = 1;
> smp_wmb();
> spin_lock(&mddev->lock);
> @@ -7361,6 +7363,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
>
> mddev->bitmap_info.nodes = 0;
> md_cluster_ops->leave(mddev);
> + mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
> }
> mddev_suspend(mddev);
> md_bitmap_destroy(mddev);
> @@ -8366,6 +8369,7 @@ int md_setup_cluster(struct mddev *mddev, int nodes)
> }
> spin_unlock(&pers_lock);
>
> + mddev->safemode_delay = 0;
> return md_cluster_ops->join(mddev, nodes);
I still don't think you should change safemode_delay here until after
->join succeeds.
NeilBrown
> }
>
> @@ -8375,6 +8379,7 @@ void md_cluster_stop(struct mddev *mddev)
> return;
> md_cluster_ops->leave(mddev);
> module_put(md_cluster_mod);
> + mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
> }
>
> static int is_mddev_idle(struct mddev *mddev, int init)
> --
> 2.25.0
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none
2020-07-19 11:08 ` [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none Zhao Heming
@ 2020-07-19 23:26 ` NeilBrown
2020-07-20 15:27 ` heming.zhao
0 siblings, 1 reply; 8+ messages in thread
From: NeilBrown @ 2020-07-19 23:26 UTC (permalink / raw)
To: linux-raid; +Cc: Zhao Heming, neilb, jes
[-- Attachment #1: Type: text/plain, Size: 2290 bytes --]
On Sun, Jul 19 2020, Zhao Heming wrote:
> update_array_info misses calling module_put when removing cluster bitmap.
>
> steps to reproduce:
> ```
> node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda
> /dev/sdb
> mdadm: array /dev/md0 started.
> node1 # lsmod | egrep "dlm|md_|raid1"
> md_cluster 28672 1
> dlm 212992 14 md_cluster
> configfs 57344 2 dlm
> raid1 53248 1
> md_mod 176128 2 raid1,md_cluster
> node1 # mdadm -G /dev/md0 -b none
> node1 # lsmod | egrep "dlm|md_|raid1"
> md_cluster 28672 1 <== should be zero
> dlm 212992 9 md_cluster
> configfs 57344 2 dlm
> raid1 53248 1
> md_mod 176128 2 raid1,md_cluster
> node1 # mdadm -G /dev/md0 -b clustered
> node1 # lsmod | egrep "dlm|md_|raid1"
> md_cluster 28672 2 <== increase
> dlm 212992 14 md_cluster
> configfs 57344 2 dlm
> raid1 53248 1
> md_mod 176128 2 raid1,md_cluster
> node1 # mdadm -G /dev/md0 -b none
> node1 # mdadm -G /dev/md0 -b clustered
> node1 # lsmod | egrep "dlm|md_|raid1"
> md_cluster 28672 3 <== increase
> dlm 212992 14 md_cluster
> configfs 57344 2 dlm
> raid1 53248 1
> md_mod 176128 2 raid1,md_cluster
> ```
>
> Signed-off-by: Zhao Heming <heming.zhao@suse.com>
> ---
> drivers/md/md.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index e20f1d5a5261..ca791387e54d 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -7363,6 +7363,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
>
> mddev->bitmap_info.nodes = 0;
> md_cluster_ops->leave(mddev);
> + module_put(md_cluster_mod);
> mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
I would make this a call to "md_cluster_stop()", and move the reset of
->safemode_delay" in there, but either way this is correct and needed.
Reviewed-by: NeilBrown <neilb@suse.de>
Thanks,
NeilBrown
> }
> mddev_suspend(mddev);
> --
> 2.25.0
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none
2020-07-19 23:26 ` NeilBrown
@ 2020-07-20 15:27 ` heming.zhao
0 siblings, 0 replies; 8+ messages in thread
From: heming.zhao @ 2020-07-20 15:27 UTC (permalink / raw)
To: NeilBrown, linux-raid; +Cc: neilb, jes
On 7/20/20 7:26 AM, NeilBrown wrote:
> On Sun, Jul 19 2020, Zhao Heming wrote:
>
>> update_array_info misses calling module_put when removing cluster bitmap.
>>
>> steps to reproduce:
>> ```
>> node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda
>> /dev/sdb
>> mdadm: array /dev/md0 started.
>> node1 # lsmod | egrep "dlm|md_|raid1"
>> md_cluster 28672 1
>> dlm 212992 14 md_cluster
>> configfs 57344 2 dlm
>> raid1 53248 1
>> md_mod 176128 2 raid1,md_cluster
>> node1 # mdadm -G /dev/md0 -b none
>> node1 # lsmod | egrep "dlm|md_|raid1"
>> md_cluster 28672 1 <== should be zero
>> dlm 212992 9 md_cluster
>> configfs 57344 2 dlm
>> raid1 53248 1
>> md_mod 176128 2 raid1,md_cluster
>> node1 # mdadm -G /dev/md0 -b clustered
>> node1 # lsmod | egrep "dlm|md_|raid1"
>> md_cluster 28672 2 <== increase
>> dlm 212992 14 md_cluster
>> configfs 57344 2 dlm
>> raid1 53248 1
>> md_mod 176128 2 raid1,md_cluster
>> node1 # mdadm -G /dev/md0 -b none
>> node1 # mdadm -G /dev/md0 -b clustered
>> node1 # lsmod | egrep "dlm|md_|raid1"
>> md_cluster 28672 3 <== increase
>> dlm 212992 14 md_cluster
>> configfs 57344 2 dlm
>> raid1 53248 1
>> md_mod 176128 2 raid1,md_cluster
>> ```
>>
>> Signed-off-by: Zhao Heming <heming.zhao@suse.com>
>> ---
>> drivers/md/md.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/md/md.c b/drivers/md/md.c
>> index e20f1d5a5261..ca791387e54d 100644
>> --- a/drivers/md/md.c
>> +++ b/drivers/md/md.c
>> @@ -7363,6 +7363,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
>>
>> mddev->bitmap_info.nodes = 0;
>> md_cluster_ops->leave(mddev);
>> + module_put(md_cluster_mod);
>> mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
>
> I would make this a call to "md_cluster_stop()", and move the reset of
> ->safemode_delay" in there, but either way this is correct and needed.
>
> Reviewed-by: NeilBrown <neilb@suse.de>
>
> Thanks,
> NeilBrown
>
Thank you for your review.
If put module_put() in md_cluster_stop(), "mddev->bitmap_info.nodes = 0" also needs to put in md_cluster_stop().
the "bitmap_info.nodes = 0" makes mddev_is_clustered() false and will close the door to call md_cluster_stop().
>
>> }
>> mddev_suspend(mddev);
>> --
>> 2.25.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap
2020-07-19 23:24 ` NeilBrown
@ 2020-07-20 16:03 ` heming.zhao
0 siblings, 0 replies; 8+ messages in thread
From: heming.zhao @ 2020-07-20 16:03 UTC (permalink / raw)
To: NeilBrown, linux-raid; +Cc: neilb
On 7/20/20 7:24 AM, NeilBrown wrote:
> On Sun, Jul 19 2020, Zhao Heming wrote:
>
>> When array convert to clustered bitmap, the safe_mode_delay doesn't clean and vice versa.
>> the /sys/block/mdX/md/safe_mode_delay keep original value after changing bitmap type.
>> in safe_delay_store(), the code forbids setting mddev->safemode_delay when array is clustered.
>> So in cluster-md env, the expected safemode_delay value should be 0.
>>
>> reproduction steps:
>> ```
>> node1 # mdadm --zero-superblock /dev/sd{b,c,d}
>> node1 # mdadm -C /dev/md0 -b internal -e 1.2 -n 2 -l mirror /dev/sdb /dev/sdc
>> node1 # cat /sys/block/md0/md/safe_mode_delay
>> 0.204
>> node1 # mdadm -G /dev/md0 -b none
>> node1 # mdadm --grow /dev/md0 --bitmap=clustered
>> node1 # cat /sys/block/md0/md/safe_mode_delay
>> 0.204 <== doesn't change, should ZERO for cluster-md
>>
>> node1 # mdadm --zero-superblock /dev/sd{b,c,d}
>> node1 # mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sdb /dev/sdc
>> node1 # cat /sys/block/md0/md/safe_mode_delay
>> 0.000
>> node1 # mdadm -G /dev/md0 -b none
>> node1 # cat /sys/block/md0/md/safe_mode_delay
>> 0.000 <== doesn't change, should default value
>> ```
>>
>> md_setup_cluster() is a good place for setting, but md_cluster_stop is
>> good for clean job when md_setup_cluster return err.
>>
>> see below flow:
>> (user space)
>> mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
>> mdadm --grow /dev/md0 -b none
>> (kernel space)
>> SET_ARRAY_INFO
>> update_array_info
>> + mddev->bitmap_info.nodes = 0;
>> + md_cluster_ops->leave(mddev)
>> + md_bitmap_destroy
>> md_bitmap_free //won't trigger md_cluster_stop() because above set 0.
>>
>> Signed-off-by: Zhao Heming <heming.zhao@suse.com>
>> ---
>> drivers/md/md.c | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/md/md.c b/drivers/md/md.c
>> index f567f536b529..e20f1d5a5261 100644
>> --- a/drivers/md/md.c
>> +++ b/drivers/md/md.c
>> @@ -101,6 +101,8 @@ static void mddev_detach(struct mddev *mddev);
>> * count by 2 for every hour elapsed between read errors.
>> */
>> #define MD_DEFAULT_MAX_CORRECTED_READ_ERRORS 20
>> +/* Default safemode delay: 200 msec */
>> +#define DEFAULT_SAFEMODE_DELAY ((200 * HZ)/1000 +1)
>> /*
>> * Current RAID-1,4,5 parallel reconstruction 'guaranteed speed limit'
>> * is 1000 KB/sec, so the extra system load does not show up that much.
>> @@ -5982,7 +5984,7 @@ int md_run(struct mddev *mddev)
>> if (mddev_is_clustered(mddev))
>> mddev->safemode_delay = 0;
>> else
>> - mddev->safemode_delay = (200 * HZ)/1000 +1; /* 200 msec delay */
>> + mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
>> mddev->in_sync = 1;
>> smp_wmb();
>> spin_lock(&mddev->lock);
>> @@ -7361,6 +7363,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
>>
>> mddev->bitmap_info.nodes = 0;
>> md_cluster_ops->leave(mddev);
>> + mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
>> }
>> mddev_suspend(mddev);
>> md_bitmap_destroy(mddev);
>> @@ -8366,6 +8369,7 @@ int md_setup_cluster(struct mddev *mddev, int nodes)
>> }
>> spin_unlock(&pers_lock);
>>
>> + mddev->safemode_delay = 0;
>> return md_cluster_ops->join(mddev, nodes);
>
> I still don't think you should change safemode_delay here until after
> ->join succeeds.
>
> NeilBrown
you are right, it makes a gap to set delay to zero before join().
I will following your comments.
>
>> }
>>
>> @@ -8375,6 +8379,7 @@ void md_cluster_stop(struct mddev *mddev)
>> return;
>> md_cluster_ops->leave(mddev);
>> module_put(md_cluster_mod);
>> + mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
>> }
>>
>> static int is_mddev_idle(struct mddev *mddev, int init)
>> --
>> 2.25.0
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-07-20 16:03 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-19 11:08 [PATCH v4 0/2] md_cluster: bugs fix Zhao Heming
2020-07-19 11:08 ` [PATCH v4 1/2] md-cluster: fix safemode_delay value when converting to clustered bitmap Zhao Heming
2020-07-19 23:24 ` NeilBrown
2020-07-20 16:03 ` heming.zhao
2020-07-19 11:08 ` [PATCH v4 2/2] md-cluster: fix rmmod issue when md_cluster convert bitmap to none Zhao Heming
2020-07-19 23:26 ` NeilBrown
2020-07-20 15:27 ` heming.zhao
2020-07-19 13:46 ` [PATCH v4 0/2] md_cluster: bugs fix heming.zhao
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.