On Fri, 2024-11-22 at 16:11 -0500, Benjamin Marzinski wrote:
> Multipath already notices if there is any empty device with the same
> alias and wwid as a device it is trying to create, and switches to a
> reload. However, if the empty device has a different alias but the
> same
> wwid, instead of reloading and renaming the device like it would for
> a device with a table. multipath will attempt to create a new device
> and fail.
> 
> Fix this by checking for these devices, and doing a reload and
> rename.
> 
> Signed-off-by: Benjamin Marzinski <[email protected]>
> ---
>  libmultipath/configure.c | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/libmultipath/configure.c b/libmultipath/configure.c
> index a7257981..d0e9c958 100644
> --- a/libmultipath/configure.c
> +++ b/libmultipath/configure.c
> @@ -835,7 +835,6 @@ int domap(struct multipath *mpp, char *params,
> int is_daemon)
>  {
>       int r = DOMAP_FAIL;
>       struct config *conf;
> -     char wwid[WWID_SIZE];
>  
>       /*
>        * last chance to quit before touching the devmaps
> @@ -846,6 +845,7 @@ int domap(struct multipath *mpp, char *params,
> int is_daemon)
>       }
>  
>       if (mpp->action == ACT_CREATE) {
> +             char wwid[WWID_SIZE];
>               int rc = dm_get_wwid(mpp->alias, wwid,
> sizeof(wwid));
>  
>               if (rc == DMP_OK && !strncmp(mpp->wwid, wwid,
> sizeof(wwid))) {
> @@ -863,7 +863,26 @@ int domap(struct multipath *mpp, char *params,
> int is_daemon)
>                       mpp->action = ACT_REJECT;
>               }
>       }
> +     if (mpp->action == ACT_CREATE) {
> +             char alias[WWID_SIZE];
> +             int rc = dm_find_map_by_wwid(mpp->wwid, alias,
> NULL);
>  
> +             if (rc == DMP_NO_MATCH) {
> +                     condlog(1, "%s: wwid \"%s\" already in use
> by non-multipath map \"%s\"",
> +                             mpp->alias, mpp->wwid, alias);

Nitpick: This is almost the same message that dm_find_map_by_wwid() has
printed immediately before. Similar messages are also printed in all
other callers of dm_find_map_by_wwid(). I suggest that we either remove
the log message in the callers or in dm_find_map_by_wwid() itself.
Probably the latter, then we can decide on a case by case basis in the
caller whether the situation needs to be logged.

Martin


Reply via email to