[libvirt] [PATCH v2 04/14] nodedev: Use switch for virNodeDeviceObjHasCap and virNodeDeviceCapMatch

Peter Krempa pkrempa at redhat.com
Fri May 26 12:36:39 UTC 2017


On Fri, May 26, 2017 at 08:22:26 -0400, John Ferlan wrote:
> 
> 
> On 05/26/2017 03:14 AM, Peter Krempa wrote:
> > On Thu, May 25, 2017 at 15:57:01 -0400, John Ferlan wrote:
> >> In order to ensure that whenever something is added to virNodeDevCapType
> >> that both functions are considered for processing of a new capability,
> >> change the if-then-else construct into a switch statement.
> >>
> >> Signed-off-by: John Ferlan <jferlan at redhat.com>
> >> ---
> >>  src/conf/virnodedeviceobj.c | 80 +++++++++++++++++++++++++++++++++------------
> >>  1 file changed, 60 insertions(+), 20 deletions(-)
> >>
> >> diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
> >> index bbb6eeb..913cdda 100644
> >> --- a/src/conf/virnodedeviceobj.c
> >> +++ b/src/conf/virnodedeviceobj.c
> >> @@ -48,19 +48,41 @@ virNodeDeviceObjHasCap(const virNodeDeviceObj *dev,
> >>      while (caps) {
> >>          if (STREQ(cap, virNodeDevCapTypeToString(caps->data.type))) {
> >>              return 1;
> >> -        } else if (caps->data.type == VIR_NODE_DEV_CAP_SCSI_HOST) {
> >> -            if ((STREQ(cap, fc_host_cap) &&
> >> -                (caps->data.scsi_host.flags &
> >> -                 VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
> >> -                (STREQ(cap, vports_cap) &&
> >> -                (caps->data.scsi_host.flags &
> >> -                 VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
> >> -                return 1;
> >> -        } else if (caps->data.type == VIR_NODE_DEV_CAP_PCI_DEV) {
> >> -            if ((STREQ(cap, mdev_types)) &&
> >> -                (caps->data.pci_dev.flags &
> >> -                 VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
> >> -                return 1;
> >> +        } else {
> >> +            switch (caps->data.type) {
> >> +            case VIR_NODE_DEV_CAP_PCI_DEV:
> >> +                if ((STREQ(cap, mdev_types)) &&
> >> +                    (caps->data.pci_dev.flags &
> >> +                     VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
> > 
> > Since you are touching this, put this on a single line. It looks very
> > ugly this way. It also fits into the 80 col boundary, so I don't see a
> > reaosn for this.
> 
> For MDEV - it can fit, for SCSI_HOST, not as clean, but it could be:
> 
>                 if ((STREQ(cap, fc_host_cap) && (caps->data.scsi_host.flags &
>                      VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
>                     (STREQ(cap, vports_cap) && (caps->data.scsi_host.flags &
>                      VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))

That is WAY worse. The binary mask should be on a single line since it's
semantically connected.

Also the 80 col rule is not really strict. Especially if it hinders
readability of the code. The above suggestion is a very good example
where you'd completely destroy readability.


>                     return 1;
> 
> Although I'm not sure I like the way that looks.

[...]

> 
> But does that "violate" the too many changes at once "guideline"? 

If you feel so, leave it as-is.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170526/5d4d0592/attachment-0001.sig>


More information about the libvir-list mailing list