On Thu, 2024-07-11 at 14:25 +0200, Martin Wilck wrote:
> On Wed, 2024-07-10 at 19:34 -0400, Benjamin Marzinski wrote:
> > On Tue, Jul 09, 2024 at 11:39:14PM +0200, Martin Wilck wrote:
> > > 
> > >  
> > > +/**
> > > + * dm_get_wwid(): return WWID for a multipath map
> > > + * @returns:
> > > + *    DMP_OK if successful
> > > + *    DMP_NOT_FOUND if the map doesn't exist
> > > + *    DMP_NO_MATCH if the map exists but is not a multipath map
> > > + *    DMP_ERR for other errors
> > > + */
> > >  int dm_get_wwid(const char *name, char *uuid, int uuid_len)
> > >  {
> > >   char tmp[DM_UUID_LEN];
> > > + int rc = dm_get_dm_uuid(name, tmp);
> > >  
> > > - if (dm_get_dm_uuid(name, tmp) != DMP_OK)
> > > -         return 1;
> > > + if (rc != DMP_OK)
> > > +         return rc;
> > >  
> > >   if (!strncmp(tmp, UUID_PREFIX, UUID_PREFIX_LEN))
> > >           strlcpy(uuid, tmp + UUID_PREFIX_LEN, uuid_len);
> > > - else
> > > + else {
> > 
> > This seems a little inconsistent with the change in our returns.
> > Before, if we found a device but it wasn't multipath device,
> > dm_get_wwid() would exit with 0 but set uuid to an empty string.
> > Now
> > we
> > return DMP_NO_MATCH in this case but we still clear uuid. It seems
> > like
> > perhaps we should either set uuid to an empty string for all cases
> > except DM_OK or we should not touch it for all cases except DM_OK.
> > Alternatively, perhaps I'm over-thinking this.
> 
> Right. In libmp_mapinfo(), I followed the idea that no output should
> be
> touched if any errors happened. Here, I wanted to preserve the
> behavior
> but didn't do it correctly.
> 
> I tend to think that "don't touch output in error case" is the
> correct
> behavior, but we'd need to review the callers and make sure that they
> don't assume the WWID will be automatically 0-terminated.
> 
> I'll do that.

Turns out that the callers that need changes because of the changed
semantics of dm_get_wwid() will be changed later on anyway, and the
respective modifications of the callers will be removed again. But I'll
do this anyway, to make the patch set consistent.

Martin


Reply via email to