On Fri, 2020-04-03 at 01:50 -0500, Benjamin Marzinski wrote: > sysfs_is_multipathed reads the wwid of the dm device holding a path > to > check if its a multipath device. Add code to optinally set pp->wwid > to > that wwid. This will be used by a future patch. > > Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > --- > libmultipath/sysfs.c | 24 +++++++++++++++++++----- > libmultipath/sysfs.h | 2 +- > multipath/main.c | 7 ++++--- > 3 files changed, 24 insertions(+), 9 deletions(-) > > diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c > index 62ec2ed7..12a82d95 100644 > --- a/libmultipath/sysfs.c > +++ b/libmultipath/sysfs.c > @@ -295,7 +295,7 @@ static int select_dm_devs(const struct dirent > *di) > return fnmatch("dm-*", di->d_name, FNM_FILE_NAME) == 0; > } > > -bool sysfs_is_multipathed(const struct path *pp) > +bool sysfs_is_multipathed(struct path *pp, bool set_wwid) > { > char pathbuf[PATH_MAX]; > struct scandir_result sr; > @@ -325,7 +325,7 @@ bool sysfs_is_multipathed(const struct path *pp) > for (i = 0; i < r && !found; i++) { > long fd; > int nr; > - char uuid[6]; > + char uuid[WWID_SIZE + UUID_PREFIX_LEN]; > > if (safe_snprintf(pathbuf + n, sizeof(pathbuf) - n, > "/%s/dm/uuid", di[i]->d_name)) > @@ -339,12 +339,26 @@ bool sysfs_is_multipathed(const struct path > *pp) > > pthread_cleanup_push(close_fd, (void *)fd); > nr = read(fd, uuid, sizeof(uuid)); > - if (nr == sizeof(uuid) && !memcmp(uuid, "mpath-", > sizeof(uuid))) > + if (nr > (int)UUID_PREFIX_LEN && > + !memcmp(uuid, UUID_PREFIX, UUID_PREFIX_LEN)) > found = true; > else if (nr < 0) { > - condlog(1, "%s: error reading from %s: %s", > - __func__, pathbuf, strerror(errno)); > + condlog(1, "%s: error reading from %s: %m", > + __func__, pathbuf); > } > + if (found && set_wwid) { > + nr -= UUID_PREFIX_LEN; > + memcpy(pp->wwid, uuid + UUID_PREFIX_LEN, nr); > + if (nr == WWID_SIZE) { > + condlog(4, "%s: overflow while reading > from %s", > + __func__, pathbuf); I would have checked this condition before calling memcpy(), but that's just a nit. Reviewed-by: Martin Wilck <mwilck@xxxxxxxx> -- Dr. Martin Wilck <mwilck@xxxxxxxx>, Tel. +49 (0)911 74053 2107 SUSE Software Solutions Germany GmbH HRB 36809, AG Nürnberg GF: Felix Imendörffer -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel