mbox series

[v2,0/6] mdadm: POSIX portable naming rules

Message ID 20230601072750.20796-1-mariusz.tkaczyk@linux.intel.com (mailing list archive)
Headers show
Series mdadm: POSIX portable naming rules | expand

Message

Mariusz Tkaczyk June 1, 2023, 7:27 a.m. UTC
Hi Jes,
To avoid problem with udev and VROC UEFI driver I developed stronger
naming policy, basing on POSIX portable names standard. Verification is
added for names and config entries. In case of an issue, user can update
name to make it compatible (for IMSM and native).

The changes here may cause /dev/md/ link will be different than before
mdadm update. To make any of that happen user need to use unusual naming
convention, like:
- special, non standard signs like, $,%,&,* or space.
- '-' used as first sign.
- locals.

Note: I didn't analyze configurations with "names=1". If name cannot be
determined mdadm should fallback to default numbered dev creation.

If you are planning release soon then feel free to merge it after the
release. It is a potential regression point.

It is a new version of [1] but it is strongly rebuild. Here is a list
of changes:
1. negative and positive test scenarios for both create and config
   entries are added.
2. Save parsed parameters in dedicated structs. It is a way to control
   what is parsed, assuming that we should use dedicated set_* function.
3. Verification for config entries is added.
5. Improved error logging for names:
   - during creation, these messages are errors, printed to stderr.
   - for config entries, messages are just a warnings printed to stdout.
6. Error messages reworked.
7. Updates in manual.

[1] https://lore.kernel.org/linux-raid/20221221115019.26276-1-mariusz.tkaczyk@linux.intel.com/

Mariusz Tkaczyk (6):
  tests: create names_template
  tests: create 00confnames
  mdadm: set ident.devname if applicable
  mdadm: refactor ident->name handling
  mdadm: define ident_set_devname()
  mdadm: Follow POSIX Portable Character Set

 Build.c                        |  21 ++--
 Create.c                       |  35 +++----
 Detail.c                       |  17 ++-
 config.c                       | 184 +++++++++++++++++++++++++++------
 lib.c                          |  76 +++++++++++---
 mdadm.8.in                     |  70 ++++++-------
 mdadm.c                        |  73 +++++--------
 mdadm.conf.5.in                |   4 -
 mdadm.h                        |  36 ++++---
 super-intel.c                  |  47 +++++----
 tests/00confnames              | 107 +++++++++++++++++++
 tests/00createnames            |  89 ++++------------
 tests/templates/names_template |  80 ++++++++++++++
 13 files changed, 551 insertions(+), 288 deletions(-)
 create mode 100644 tests/00confnames
 create mode 100644 tests/templates/names_template

Comments

Paul Menzel June 1, 2023, 8:57 a.m. UTC | #1
Dear Mariusz,


Am 01.06.23 um 09:27 schrieb Mariusz Tkaczyk:

> To avoid problem with udev and VROC UEFI driver I developed stronger
> naming policy, basing on POSIX portable names standard. Verification is

s/basing/based/

> added for names and config entries. In case of an issue, user can update
> name to make it compatible (for IMSM and native).

What is the VROC UEFI driver, and what is the problem exactly to risk 
regressions on the user side? Why can’t the UEFI driver be fixed?


Kind regards,

Paul


> The changes here may cause /dev/md/ link will be different than before
> mdadm update. To make any of that happen user need to use unusual naming
> convention, like:
> - special, non standard signs like, $,%,&,* or space.
> - '-' used as first sign.
> - locals.
> 
> Note: I didn't analyze configurations with "names=1". If name cannot be
> determined mdadm should fallback to default numbered dev creation.
> 
> If you are planning release soon then feel free to merge it after the
> release. It is a potential regression point.
> 
> It is a new version of [1] but it is strongly rebuild. Here is a list
> of changes:
> 1. negative and positive test scenarios for both create and config
>     entries are added.
> 2. Save parsed parameters in dedicated structs. It is a way to control
>     what is parsed, assuming that we should use dedicated set_* function.
> 3. Verification for config entries is added.
> 5. Improved error logging for names:
>     - during creation, these messages are errors, printed to stderr.
>     - for config entries, messages are just a warnings printed to stdout.
> 6. Error messages reworked.
> 7. Updates in manual.
> 
> [1] https://lore.kernel.org/linux-raid/20221221115019.26276-1-mariusz.tkaczyk@linux.intel.com/
> 
> Mariusz Tkaczyk (6):
>    tests: create names_template
>    tests: create 00confnames
>    mdadm: set ident.devname if applicable
>    mdadm: refactor ident->name handling
>    mdadm: define ident_set_devname()
>    mdadm: Follow POSIX Portable Character Set
> 
>   Build.c                        |  21 ++--
>   Create.c                       |  35 +++----
>   Detail.c                       |  17 ++-
>   config.c                       | 184 +++++++++++++++++++++++++++------
>   lib.c                          |  76 +++++++++++---
>   mdadm.8.in                     |  70 ++++++-------
>   mdadm.c                        |  73 +++++--------
>   mdadm.conf.5.in                |   4 -
>   mdadm.h                        |  36 ++++---
>   super-intel.c                  |  47 +++++----
>   tests/00confnames              | 107 +++++++++++++++++++
>   tests/00createnames            |  89 ++++------------
>   tests/templates/names_template |  80 ++++++++++++++
>   13 files changed, 551 insertions(+), 288 deletions(-)
>   create mode 100644 tests/00confnames
>   create mode 100644 tests/templates/names_template
>
Mariusz Tkaczyk June 1, 2023, 9:52 a.m. UTC | #2
On Thu, 1 Jun 2023 10:57:47 +0200
Paul Menzel <pmenzel@molgen.mpg.de> wrote:

> Dear Mariusz,
> 
> 
> Am 01.06.23 um 09:27 schrieb Mariusz Tkaczyk:
> 
> > To avoid problem with udev and VROC UEFI driver I developed stronger
> > naming policy, basing on POSIX portable names standard. Verification is  
> 
> s/basing/based/

Noted, thanks.

> 
> > added for names and config entries. In case of an issue, user can update
> > name to make it compatible (for IMSM and native).  
> 
> What is the VROC UEFI driver, and what is the problem exactly to risk 
> regressions on the user side? Why can’t the UEFI driver be fixed?

Thanks for your question. I should mark this as [RFC].

VROC solution (called IMSM here, or super-intel) comes with UEFI support. You
can manipulate arrays in UEFI, for example you can create an array to have it
available as installation destination for new OS.

I decided that it is worth to mention that we have UEFI driver and there are
some differences in allowed names. Now I think, that it is irrelevant in this
context because my main concern is udevd. The "POSIX portable names" are strict
and that should prevent any differences in names.

Current form is aggressive (do not allow at all) and if you think that I should
lower the requirements or bring the option to pass without verification to
ensure backward compatibility- will do, just let me know.

I would like to add exceptions based on community input because it affect
multiple metadata formats.
I think that we should require to follow those rules for new arrays.

Thanks,
Mariusz
> 
> 
> Kind regards,
> 
> Paul
> 
> 
> > The changes here may cause /dev/md/ link will be different than before
> > mdadm update. To make any of that happen user need to use unusual naming
> > convention, like:
> > - special, non standard signs like, $,%,&,* or space.
> > - '-' used as first sign.
> > - locals.
> > 
> > Note: I didn't analyze configurations with "names=1". If name cannot be
> > determined mdadm should fallback to default numbered dev creation.
> > 
> > If you are planning release soon then feel free to merge it after the
> > release. It is a potential regression point.
> > 
> > It is a new version of [1] but it is strongly rebuild. Here is a list
> > of changes:
> > 1. negative and positive test scenarios for both create and config
> >     entries are added.
> > 2. Save parsed parameters in dedicated structs. It is a way to control
> >     what is parsed, assuming that we should use dedicated set_* function.
> > 3. Verification for config entries is added.
> > 5. Improved error logging for names:
> >     - during creation, these messages are errors, printed to stderr.
> >     - for config entries, messages are just a warnings printed to stdout.
> > 6. Error messages reworked.
> > 7. Updates in manual.
> > 
> > [1]
> > https://lore.kernel.org/linux-raid/20221221115019.26276-1-mariusz.tkaczyk@linux.intel.com/
> > 
> > Mariusz Tkaczyk (6):
> >    tests: create names_template
> >    tests: create 00confnames
> >    mdadm: set ident.devname if applicable
> >    mdadm: refactor ident->name handling
> >    mdadm: define ident_set_devname()
> >    mdadm: Follow POSIX Portable Character Set
> > 
> >   Build.c                        |  21 ++--
> >   Create.c                       |  35 +++----
> >   Detail.c                       |  17 ++-
> >   config.c                       | 184 +++++++++++++++++++++++++++------
> >   lib.c                          |  76 +++++++++++---
> >   mdadm.8.in                     |  70 ++++++-------
> >   mdadm.c                        |  73 +++++--------
> >   mdadm.conf.5.in                |   4 -
> >   mdadm.h                        |  36 ++++---
> >   super-intel.c                  |  47 +++++----
> >   tests/00confnames              | 107 +++++++++++++++++++
> >   tests/00createnames            |  89 ++++------------
> >   tests/templates/names_template |  80 ++++++++++++++
> >   13 files changed, 551 insertions(+), 288 deletions(-)
> >   create mode 100644 tests/00confnames
> >   create mode 100644 tests/templates/names_template
> >
Jes Sorensen Oct. 26, 2023, 9:31 p.m. UTC | #3
On 6/1/23 03:27, Mariusz Tkaczyk wrote:
> Hi Jes,
> To avoid problem with udev and VROC UEFI driver I developed stronger
> naming policy, basing on POSIX portable names standard. Verification is
> added for names and config entries. In case of an issue, user can update
> name to make it compatible (for IMSM and native).
> 
> The changes here may cause /dev/md/ link will be different than before
> mdadm update. To make any of that happen user need to use unusual naming
> convention, like:
> - special, non standard signs like, $,%,&,* or space.
> - '-' used as first sign.
> - locals.
> 
> Note: I didn't analyze configurations with "names=1". If name cannot be
> determined mdadm should fallback to default numbered dev creation.
> 
> If you are planning release soon then feel free to merge it after the
> release. It is a potential regression point.
> 
> It is a new version of [1] but it is strongly rebuild. Here is a list
> of changes:
> 1. negative and positive test scenarios for both create and config
>    entries are added.
> 2. Save parsed parameters in dedicated structs. It is a way to control
>    what is parsed, assuming that we should use dedicated set_* function.
> 3. Verification for config entries is added.
> 5. Improved error logging for names:
>    - during creation, these messages are errors, printed to stderr.
>    - for config entries, messages are just a warnings printed to stdout.
> 6. Error messages reworked.
> 7. Updates in manual.
> 
> [1] https://lore.kernel.org/linux-raid/20221221115019.26276-1-mariusz.tkaczyk@linux.intel.com/
> 
> Mariusz Tkaczyk (6):
>   tests: create names_template
>   tests: create 00confnames
>   mdadm: set ident.devname if applicable
>   mdadm: refactor ident->name handling
>   mdadm: define ident_set_devname()
>   mdadm: Follow POSIX Portable Character Set

Applied!

Thanks,
Jes