* [PATCH v3 0/2] Fix force assemblation
@ 2022-08-19 0:55 Kinga Tanska
2022-08-19 0:55 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska
2022-08-19 0:55 ` [PATCH v3 2/2] mdadm: replace container level checking with inline Kinga Tanska
0 siblings, 2 replies; 8+ messages in thread
From: Kinga Tanska @ 2022-08-19 0:55 UTC (permalink / raw)
To: linux-raid; +Cc: jes, colyli
Series of patches contains fix to prevent update operation
for container, when force assemblation is triggered. To unify all
uses of checking array level, inline function was introduced and
propagated.
Kinga Tanska (2):
Assemble: check if device is container before scheduling force-clean
update
mdadm: replace container level checking with inline
Assemble.c | 10 ++++------
Create.c | 6 +++---
Grow.c | 6 +++---
Incremental.c | 4 ++--
mdadm.h | 14 ++++++++++++++
super-ddf.c | 6 +++---
super-intel.c | 4 ++--
super0.c | 2 +-
super1.c | 2 +-
sysfs.c | 2 +-
10 files changed, 34 insertions(+), 22 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update 2022-08-19 0:55 [PATCH v3 0/2] Fix force assemblation Kinga Tanska @ 2022-08-19 0:55 ` Kinga Tanska 2022-08-24 16:01 ` Jes Sorensen 2022-08-19 0:55 ` [PATCH v3 2/2] mdadm: replace container level checking with inline Kinga Tanska 1 sibling, 1 reply; 8+ messages in thread From: Kinga Tanska @ 2022-08-19 0:55 UTC (permalink / raw) To: linux-raid; +Cc: jes, colyli Up to now using assemble with force flag making each array as clean. Force-clean should not be done for the container. This commit add check if device is different than container before cleaning. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> --- Assemble.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Assemble.c b/Assemble.c index 704b8293..f31372db 100644 --- a/Assemble.c +++ b/Assemble.c @@ -1813,10 +1813,9 @@ try_again: } #endif } - if (c->force && !clean && + if (c->force && !clean && content->array.level != LEVEL_CONTAINER && !enough(content->array.level, content->array.raid_disks, - content->array.layout, clean, - avail)) { + content->array.layout, clean, avail)) { change += st->ss->update_super(st, content, "force-array", devices[chosen_drive].devname, c->verbose, 0, NULL); -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update 2022-08-19 0:55 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska @ 2022-08-24 16:01 ` Jes Sorensen 0 siblings, 0 replies; 8+ messages in thread From: Jes Sorensen @ 2022-08-24 16:01 UTC (permalink / raw) To: Kinga Tanska, linux-raid; +Cc: colyli On 8/18/22 20:55, Kinga Tanska wrote: > Up to now using assemble with force flag making each array as clean. > Force-clean should not be done for the container. This commit add > check if device is different than container before cleaning. > > Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> > --- > Assemble.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/Assemble.c b/Assemble.c > index 704b8293..f31372db 100644 > --- a/Assemble.c > +++ b/Assemble.c > @@ -1813,10 +1813,9 @@ try_again: > } > #endif > } > - if (c->force && !clean && > + if (c->force && !clean && content->array.level != LEVEL_CONTAINER && > !enough(content->array.level, content->array.raid_disks, > - content->array.layout, clean, > - avail)) { > + content->array.layout, clean, avail)) { > change += st->ss->update_super(st, content, "force-array", > devices[chosen_drive].devname, c->verbose, > 0, NULL); Applied, Thanks, Jes ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] mdadm: replace container level checking with inline 2022-08-19 0:55 [PATCH v3 0/2] Fix force assemblation Kinga Tanska 2022-08-19 0:55 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska @ 2022-08-19 0:55 ` Kinga Tanska 2022-08-24 16:03 ` Jes Sorensen 1 sibling, 1 reply; 8+ messages in thread From: Kinga Tanska @ 2022-08-19 0:55 UTC (permalink / raw) To: linux-raid; +Cc: jes, colyli To unify all containers checks in code, is_container() function is added and propagated. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> --- Assemble.c | 5 ++--- Create.c | 6 +++--- Grow.c | 6 +++--- Incremental.c | 4 ++-- mdadm.h | 14 ++++++++++++++ super-ddf.c | 6 +++--- super-intel.c | 4 ++-- super0.c | 2 +- super1.c | 2 +- sysfs.c | 2 +- 10 files changed, 32 insertions(+), 19 deletions(-) diff --git a/Assemble.c b/Assemble.c index f31372db..27324939 100644 --- a/Assemble.c +++ b/Assemble.c @@ -1123,7 +1123,7 @@ static int start_array(int mdfd, i/2, mddev); } - if (content->array.level == LEVEL_CONTAINER) { + if (is_container(content->array.level)) { sysfs_rules_apply(mddev, content); if (c->verbose >= 0) { pr_err("Container %s has been assembled with %d drive%s", @@ -1553,8 +1553,7 @@ try_again: */ trustworthy = LOCAL; - if (name[0] == 0 && - content->array.level == LEVEL_CONTAINER) { + if (!name[0] && is_container(content->array.level)) { name = content->text_version; trustworthy = METADATA; } diff --git a/Create.c b/Create.c index 0ff1922d..6edc4ad3 100644 --- a/Create.c +++ b/Create.c @@ -472,7 +472,7 @@ int Create(struct supertype *st, char *mddev, st->minor_version >= 1) /* metadata at front */ warn |= check_partitions(fd, dname, 0, 0); - else if (s->level == 1 || s->level == LEVEL_CONTAINER || + else if (s->level == 1 || is_container(s->level) || (s->level == 0 && s->raiddisks == 1)) /* partitions could be meaningful */ warn |= check_partitions(fd, dname, freesize*2, s->size*2); @@ -982,7 +982,7 @@ int Create(struct supertype *st, char *mddev, * again returns container info. */ st->ss->getinfo_super(st, &info_new, NULL); - if (st->ss->external && s->level != LEVEL_CONTAINER && + if (st->ss->external && !is_container(s->level) && !same_uuid(info_new.uuid, info.uuid, 0)) { map_update(&map, fd2devnm(mdfd), info_new.text_version, @@ -1025,7 +1025,7 @@ int Create(struct supertype *st, char *mddev, map_unlock(&map); free(infos); - if (s->level == LEVEL_CONTAINER) { + if (is_container(s->level)) { /* No need to start. But we should signal udev to * create links */ sysfs_uevent(&info, "change"); diff --git a/Grow.c b/Grow.c index 9c6fc95e..391c4212 100644 --- a/Grow.c +++ b/Grow.c @@ -2156,7 +2156,7 @@ size_change_error: devname, s->size); } changed = 1; - } else if (array.level != LEVEL_CONTAINER) { + } else if (!is_container(array.level)) { s->size = get_component_size(fd)/2; if (s->size == 0) s->size = array.size; @@ -2212,7 +2212,7 @@ size_change_error: info.component_size = s->size*2; info.new_level = s->level; info.new_chunk = s->chunk * 1024; - if (info.array.level == LEVEL_CONTAINER) { + if (is_container(info.array.level)) { info.delta_disks = UnSet; info.array.raid_disks = s->raiddisks; } else if (s->raiddisks) @@ -2325,7 +2325,7 @@ size_change_error: printf("layout for %s set to %d\n", devname, array.layout); } - } else if (array.level == LEVEL_CONTAINER) { + } else if (is_container(array.level)) { /* This change is to be applied to every array in the * container. This is only needed when the metadata imposes * restraints of the various arrays in the container. diff --git a/Incremental.c b/Incremental.c index a57fc323..077d4eea 100644 --- a/Incremental.c +++ b/Incremental.c @@ -244,7 +244,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c, c->autof = ci->autof; name_to_use = info.name; - if (name_to_use[0] == 0 && info.array.level == LEVEL_CONTAINER) { + if (name_to_use && is_container(info.array.level)) { name_to_use = info.text_version; trustworthy = METADATA; } @@ -472,7 +472,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c, /* 7/ Is there enough devices to possibly start the array? */ /* 7a/ if not, finish with success. */ - if (info.array.level == LEVEL_CONTAINER) { + if (is_container(info.array.level)) { char devnm[32]; /* Try to assemble within the container */ sysfs_uevent(sra, "change"); diff --git a/mdadm.h b/mdadm.h index c7268a71..72abfc50 100644 --- a/mdadm.h +++ b/mdadm.h @@ -1885,3 +1885,17 @@ enum r0layout { * This is true for native and DDF, IMSM allows 16. */ #define MD_NAME_MAX 32 + +/** + * is_container() - check if @level is &LEVEL_CONTAINER + * @level: level value + * + * return: + * 1 if level is equal to &LEVEL_CONTAINER, 0 otherwise. + */ +static inline int is_container(const int level) +{ + if (level == LEVEL_CONTAINER) + return 1; + return 0; +} \ No newline at end of file diff --git a/super-ddf.c b/super-ddf.c index 3f304cdc..bd366da2 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -3345,7 +3345,7 @@ static int validate_geometry_ddf(struct supertype *st, if (level == LEVEL_NONE) level = LEVEL_CONTAINER; - if (level == LEVEL_CONTAINER) { + if (is_container(level)) { /* Must be a fresh device to add to a container */ return validate_geometry_ddf_container(st, level, layout, raiddisks, *chunk, @@ -3460,7 +3460,7 @@ validate_geometry_ddf_container(struct supertype *st, int fd; unsigned long long ldsize; - if (level != LEVEL_CONTAINER) + if (!is_container(level)) return 0; if (!dev) return 1; @@ -3498,7 +3498,7 @@ static int validate_geometry_ddf_bvd(struct supertype *st, struct dl *dl; unsigned long long maxsize; /* ddf/bvd supports lots of things, but not containers */ - if (level == LEVEL_CONTAINER) { + if (is_container(level)) { if (verbose) pr_err("DDF cannot create a container within an container\n"); return 0; diff --git a/super-intel.c b/super-intel.c index d5fad102..7376a2e9 100644 --- a/super-intel.c +++ b/super-intel.c @@ -6661,7 +6661,7 @@ static int validate_geometry_imsm_container(struct supertype *st, int level, struct intel_super *super = NULL; int rv = 0; - if (level != LEVEL_CONTAINER) + if (!is_container(level)) return 0; if (!dev) return 1; @@ -7580,7 +7580,7 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, * if given unused devices create a container * if given given devices in a container create a member volume */ - if (level == LEVEL_CONTAINER) + if (is_container(level)) /* Must be a fresh device to add to a container */ return validate_geometry_imsm_container(st, level, raiddisks, data_offset, dev, diff --git a/super0.c b/super0.c index b79b97a9..87a4b374 100644 --- a/super0.c +++ b/super0.c @@ -1273,7 +1273,7 @@ static int validate_geometry0(struct supertype *st, int level, if (get_linux_version() < 3001000) tbmax = 2; - if (level == LEVEL_CONTAINER) { + if (is_container(level)) { if (verbose) pr_err("0.90 metadata does not support containers\n"); return 0; diff --git a/super1.c b/super1.c index a12a5bc8..d3a48478 100644 --- a/super1.c +++ b/super1.c @@ -2800,7 +2800,7 @@ static int validate_geometry1(struct supertype *st, int level, unsigned long long overhead; int fd; - if (level == LEVEL_CONTAINER) { + if (is_container(level)) { if (verbose) pr_err("1.x metadata does not support containers\n"); return 0; diff --git a/sysfs.c b/sysfs.c index 2995713d..054842c2 100644 --- a/sysfs.c +++ b/sysfs.c @@ -762,7 +762,7 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume) rv = sysfs_set_num(sra, sd, "offset", sd->data_offset); rv |= sysfs_set_num(sra, sd, "size", (sd->component_size+1) / 2); - if (sra->array.level != LEVEL_CONTAINER) { + if (!is_container(sra->array.level)) { if (sra->consistency_policy == CONSISTENCY_POLICY_PPL) { rv |= sysfs_set_num(sra, sd, "ppl_sector", sd->ppl_sector); rv |= sysfs_set_num(sra, sd, "ppl_size", sd->ppl_size); -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/2] mdadm: replace container level checking with inline 2022-08-19 0:55 ` [PATCH v3 2/2] mdadm: replace container level checking with inline Kinga Tanska @ 2022-08-24 16:03 ` Jes Sorensen 2022-08-24 16:44 ` Coly Li 0 siblings, 1 reply; 8+ messages in thread From: Jes Sorensen @ 2022-08-24 16:03 UTC (permalink / raw) To: Kinga Tanska, linux-raid; +Cc: colyli On 8/18/22 20:55, Kinga Tanska wrote: > To unify all containers checks in code, is_container() function is > added and propagated. > > Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> > --- > Assemble.c | 5 ++--- > Create.c | 6 +++--- > Grow.c | 6 +++--- > Incremental.c | 4 ++-- > mdadm.h | 14 ++++++++++++++ > super-ddf.c | 6 +++--- > super-intel.c | 4 ++-- > super0.c | 2 +- > super1.c | 2 +- > sysfs.c | 2 +- > 10 files changed, 32 insertions(+), 19 deletions(-) This one fails to apply for me from patcheworks. That said, a minor nit below. Mind fixing this and posting an updated version? Thanks, Jes > diff --git a/mdadm.h b/mdadm.h > index c7268a71..72abfc50 100644 > --- a/mdadm.h > +++ b/mdadm.h > @@ -1885,3 +1885,17 @@ enum r0layout { > * This is true for native and DDF, IMSM allows 16. > */ > #define MD_NAME_MAX 32 > + > +/** > + * is_container() - check if @level is &LEVEL_CONTAINER > + * @level: level value > + * > + * return: > + * 1 if level is equal to &LEVEL_CONTAINER, 0 otherwise. > + */ > +static inline int is_container(const int level) > +{ > + if (level == LEVEL_CONTAINER) > + return 1; > + return 0; > +} > \ No newline at end of file Please add the lost newline ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/2] mdadm: replace container level checking with inline 2022-08-24 16:03 ` Jes Sorensen @ 2022-08-24 16:44 ` Coly Li 0 siblings, 0 replies; 8+ messages in thread From: Coly Li @ 2022-08-24 16:44 UTC (permalink / raw) To: Jes Sorensen; +Cc: Kinga Tanska, linux-raid > 2022年8月25日 00:03,Jes Sorensen <jes@trained-monkey.org> 写道: > > On 8/18/22 20:55, Kinga Tanska wrote: >> To unify all containers checks in code, is_container() function is >> added and propagated. >> >> Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> >> --- >> Assemble.c | 5 ++--- >> Create.c | 6 +++--- >> Grow.c | 6 +++--- >> Incremental.c | 4 ++-- >> mdadm.h | 14 ++++++++++++++ >> super-ddf.c | 6 +++--- >> super-intel.c | 4 ++-- >> super0.c | 2 +- >> super1.c | 2 +- >> sysfs.c | 2 +- >> 10 files changed, 32 insertions(+), 19 deletions(-) > > This one fails to apply for me from patcheworks. That said, a minor nit > below. > > Mind fixing this and posting an updated version? > > Thanks, > Jes > > >> diff --git a/mdadm.h b/mdadm.h >> index c7268a71..72abfc50 100644 >> --- a/mdadm.h >> +++ b/mdadm.h >> @@ -1885,3 +1885,17 @@ enum r0layout { >> * This is true for native and DDF, IMSM allows 16. >> */ >> #define MD_NAME_MAX 32 >> + >> +/** >> + * is_container() - check if @level is &LEVEL_CONTAINER >> + * @level: level value >> + * >> + * return: >> + * 1 if level is equal to &LEVEL_CONTAINER, 0 otherwise. >> + */ >> +static inline int is_container(const int level) >> +{ >> + if (level == LEVEL_CONTAINER) >> + return 1; >> + return 0; >> +} >> \ No newline at end of file > > Please add the lost newline Hi Jes, This one was fixed in my previous post to you. And it can be found from the mdadm-CI tree (git://git.kernel.org/pub/scm/linux/kernel/git/colyli/mdadm.git) at commit 1065f521f833ebaac1bce934e8dea91fcd8221ae If you want, I can post a v4 version for this patch. Coly Li ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 0/2] Fix force addemblation
@ 2022-08-18 7:20 Kinga Tanska
2022-08-18 7:20 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska
0 siblings, 1 reply; 8+ messages in thread
From: Kinga Tanska @ 2022-08-18 7:20 UTC (permalink / raw)
To: linux-raid; +Cc: jes, colyli
Series of patches contains fix to prevent update operation
for container, when force assemblation is triggered. To unify all
uses of checking array level, inline function was introduced and
propagated.
Kinga Tanska (2):
Assemble: check if device is container before scheduling force-clean
update
mdadm: replace container level checking with inline
Assemble.c | 10 ++++------
Create.c | 6 +++---
Grow.c | 6 +++---
Incremental.c | 4 ++--
mdadm.h | 14 ++++++++++++++
super-ddf.c | 6 +++---
super-intel.c | 4 ++--
super0.c | 2 +-
super1.c | 2 +-
sysfs.c | 2 +-
10 files changed, 34 insertions(+), 22 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update 2022-08-18 7:20 [PATCH v3 0/2] Fix force addemblation Kinga Tanska @ 2022-08-18 7:20 ` Kinga Tanska 0 siblings, 0 replies; 8+ messages in thread From: Kinga Tanska @ 2022-08-18 7:20 UTC (permalink / raw) To: linux-raid; +Cc: jes, colyli Up to now using assemble with force flag making each array as clean. Force-clean should not be done for the container. This commit add check if device is different than container before cleaning. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> --- Assemble.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Assemble.c b/Assemble.c index 704b8293..f31372db 100644 --- a/Assemble.c +++ b/Assemble.c @@ -1813,10 +1813,9 @@ try_again: } #endif } - if (c->force && !clean && + if (c->force && !clean && content->array.level != LEVEL_CONTAINER && !enough(content->array.level, content->array.raid_disks, - content->array.layout, clean, - avail)) { + content->array.layout, clean, avail)) { change += st->ss->update_super(st, content, "force-array", devices[chosen_drive].devname, c->verbose, 0, NULL); -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 0/2] Fix force assemblation
@ 2022-07-05 11:58 Kinga Tanska
2022-07-05 11:58 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska
0 siblings, 1 reply; 8+ messages in thread
From: Kinga Tanska @ 2022-07-05 11:58 UTC (permalink / raw)
To: linux-raid; +Cc: jes, colyli
Series of patches contains fix to prevent update operation
for container, when force assemblation is triggered. To unify all
uses of checking array level, inline function was introduced and
propagated.
Kinga Tanska (2):
Assemble: check if device is container before scheduling force-clean
update
mdadm: replace container level checking with inline
Assemble.c | 10 ++++------
Create.c | 6 +++---
Grow.c | 6 +++---
Incremental.c | 4 ++--
mdadm.h | 14 ++++++++++++++
super-ddf.c | 6 +++---
super-intel.c | 4 ++--
super0.c | 2 +-
super1.c | 2 +-
sysfs.c | 2 +-
10 files changed, 34 insertions(+), 22 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update 2022-07-05 11:58 [PATCH v3 0/2] Fix force assemblation Kinga Tanska @ 2022-07-05 11:58 ` Kinga Tanska 0 siblings, 0 replies; 8+ messages in thread From: Kinga Tanska @ 2022-07-05 11:58 UTC (permalink / raw) To: linux-raid; +Cc: jes, colyli When assemble is used with --force flag and array is not clean then "force-clean" update is scheduled. Containers are considered as not clean because this field is not set for them. To exclude them from meaningless update (it is ignored quietly) check if the device is a container first. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> --- Assemble.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Assemble.c b/Assemble.c index 704b8293..f31372db 100644 --- a/Assemble.c +++ b/Assemble.c @@ -1813,10 +1813,9 @@ try_again: } #endif } - if (c->force && !clean && + if (c->force && !clean && content->array.level != LEVEL_CONTAINER && !enough(content->array.level, content->array.raid_disks, - content->array.layout, clean, - avail)) { + content->array.layout, clean, avail)) { change += st->ss->update_super(st, content, "force-array", devices[chosen_drive].devname, c->verbose, 0, NULL); -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-08-24 16:45 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-08-19 0:55 [PATCH v3 0/2] Fix force assemblation Kinga Tanska 2022-08-19 0:55 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska 2022-08-24 16:01 ` Jes Sorensen 2022-08-19 0:55 ` [PATCH v3 2/2] mdadm: replace container level checking with inline Kinga Tanska 2022-08-24 16:03 ` Jes Sorensen 2022-08-24 16:44 ` Coly Li -- strict thread matches above, loose matches on Subject: below -- 2022-08-18 7:20 [PATCH v3 0/2] Fix force addemblation Kinga Tanska 2022-08-18 7:20 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska 2022-07-05 11:58 [PATCH v3 0/2] Fix force assemblation Kinga Tanska 2022-07-05 11:58 ` [PATCH v3 1/2] Assemble: check if device is container before scheduling force-clean update Kinga Tanska
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).