[libvirt] [PATCH] nwfilter: cleanup return codes in nwfilter subsystem
Eric Blake
eblake at redhat.com
Thu Dec 8 23:19:32 UTC 2011
On 11/23/2011 02:19 PM, Stefan Berger wrote:
> This patch cleans up return codes in the nwfilter subsystem.
>
> Some functions in nwfilter_conf.c (validators and formatters) are
> keeping their bool return for now and I am converting their return
> code to true/false.
>
> All other functions now return -1 on failure and 0 on success.
>
> [I searched for all occurences of ' 1;' and checked all 'if ' and
> adapted where needed. After that I did a grep for 'NWFilter' in the source
> tree.]
Resuming where I left off last time...
> Index: libvirt-acl/src/conf/nwfilter_params.c
> @@ -505,25 +505,25 @@ virNWFilterHashTablePut(virNWFilterHashT
> if (copyName) {
> name = strdup(name);
> if (!name)
> - return 1;
> + return -1;
virNWFilterDetermineMissingVarsRec() has an unchecked call to this
function, meaning that an OOM error can go undetected in that call site.
All other calls to this function look sanely converted.
> @@ -640,7 +640,7 @@ virNWFilterHashTablePutAll(virNWFilterHa
> return 0;
>
> err_exit:
> - return 1;
> + return -1;
All callers look sanely converted.
> Index: libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
> ===================================================================
> --- libvirt-acl.orig/src/nwfilter/nwfilter_gentech_driver.c
> +++ libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
> @@ -106,7 +106,7 @@ virNWFilterRuleInstAddData(virNWFilterRu
Comment prior to the function needs an update.
> {
> if (VIR_REALLOC_N(res->data, res->ndata+1) < 0) {
> virReportOOMError();
> - return 1;
> + return -1;
All callers look sanely converted.
> @@ -151,28 +151,28 @@ virNWFilterVarHashmapAddStdValues(virNWF
> if (macaddr) {
> val = virNWFilterVarValueCreateSimple(macaddr);
> if (!val)
> - return 1;
> + return -1;
Comment prior to the function needs an update. All callers correctly
converted.
> @@ -404,13 +404,13 @@ _virNWFilterInstantiateRec(virNWFilterTe
> ifname,
> vars);
> if (!inst) {
> - rc = 1;
> + rc = -1;
Looks sane.
> @@ -504,7 +504,7 @@ virNWFilterDetermineMissingVarsRec(virNW
> if (!virHashLookup(vars->hashTable, rule->vars[j])) {
> val = virNWFilterVarValueCreateSimpleCopyValue("1");
> if (!val) {
> - rc = 1;
> + rc = -1;
Looks sane.
> @@ -592,7 +592,7 @@ virNWFilterRuleInstancesToArray(int nEnt
>
> if (VIR_ALLOC_N((*ptrs), (*nptrs)) < 0) {
> virReportOOMError();
> - return 1;
> + return -1;
Looks sane.
> @@ -649,7 +649,7 @@ virNWFilterInstantiate(virNWFilterTechDr
> virNWFilterHashTablePtr missing_vars = virNWFilterHashTableCreate(0);
> if (!missing_vars) {
> virReportOOMError();
> - rc = 1;
> + rc = -1;
This one calls through a callback that I did not audit:
rc = techdriver->applyNewRules(ifname, nptrs, ptrs);
but assuming the callback is okay (or that you change things to ensure
rc is -1 even if the callback returns positive), then clients of this
look okay.
> @@ -792,7 +792,7 @@ __virNWFilterInstantiateFilter(bool tear
> _("Could not get access to ACL tech "
> "driver '%s'"),
> drvname);
> - return 1;
> + return -1;
Ultimately called via virNWFilterInstantiateFilterLate, in turn called
by nwfilter_learnipaddr.c:learnIPAddressThread, which collects the
return value and prints it in a VIR_DEBUG but does nothing if the value
was negative. Is that a problem?
Also called by the .instantiateFilter callback installed by
nwfilter_driver.c, which feeds virDomainConfNWFilterInstantiate, and all
callers look clean.
> @@ -1012,7 +1012,7 @@ int virNWFilterRollbackUpdateFilter(cons
> _("Could not get access to ACL tech "
> "driver '%s'"),
> drvname);
> - return 1;
> + return -1;
Should this function be static? No one outside of gentech_driver calls
it. At any rate, callers inside the file are sane.
> @@ -1038,7 +1038,7 @@ virNWFilterTearOldFilter(virDomainNetDef
> _("Could not get access to ACL tech "
> "driver '%s'"),
> drvname);
> - return 1;
> + return -1;
Same comments about static, and sane usage.
> @@ -1063,13 +1063,13 @@ _virNWFilterTeardownFilter(const char *i
> _("Could not get access to ACL tech "
> "driver '%s'"),
> drvname);
> - return 1;
> + return -1;
Doesn't strictly matter (the ultimate caller nwfilterTeardownFilter
returns void), but might as well be consistent.
> Index: libvirt-acl/src/nwfilter/nwfilter_learnipaddr.c
> @@ -184,7 +184,7 @@ virNWFilterLockIface(const char *ifname)
> err_exit:
> virMutexUnlock(&ifaceMapLock);
>
> - return 1;
> + return -1;
Looks sane.
> @@ -248,7 +248,7 @@ virNWFilterRegisterLearnReq(virNWFilterI
>
> int
> virNWFilterTerminateLearnReq(const char *ifname) {
> - int rc = 1;
> + int rc = -1;
The only caller (in gentech_driver) doesn't pay attention to the return
value; but that's probably okay. Looks sane.
> @@ -336,9 +336,6 @@ virNWFilterAddIpAddrForIfname(const char
> goto cleanup;
> }
> ret = virNWFilterHashTablePut(ipAddressMap, ifname, val, 1);
> - /* FIXME: fix when return code of virNWFilterHashTablePut changes */
> - if (ret)
> - ret = -1;
Always fun to get rid of a FIXME.
> @@ -530,7 +527,7 @@ learnIPAddressThread(void *arg)
> break;
> default:
> if (techdriver->applyBasicRules(req->ifname,
> - req->macaddr)) {
> + req->macaddr) < 0) {
I didn't audit where this callback came from, but assume it was okay.
> @@ -781,14 +778,14 @@ virNWFilterLearnIPAddress(virNWFilterTec
> virNWFilterHashTablePtr ht = NULL;
>
> if (howDetect == 0)
> - return 1;
> + return -1;
Looks sane.
> @@ -895,35 +892,35 @@ virNWFilterLearnInit(void) {
>
> pendingLearnReq = virHashCreate(0, freeLearnReqEntry);
> if (!pendingLearnReq) {
> - return 1;
> + return -1;
Looks sane.
> Index: libvirt-acl/src/nwfilter/nwfilter_ebiptables_driver.c
> ===================================================================
> --- libvirt-acl.orig/src/nwfilter/nwfilter_ebiptables_driver.c
> +++ libvirt-acl/src/nwfilter/nwfilter_ebiptables_driver.c
> @@ -233,15 +233,15 @@ printVar(virNWFilterVarCombIterPtr vars,
> val = virNWFilterVarCombIterGetVarValue(vars, item->var);
> if (!val) {
> /* error has been reported */
> - return 1;
> + return -1;
Looks sane.
> @@ -259,8 +259,8 @@ _printDataType(virNWFilterVarCombIterPtr
> int done;
> char *data;
>
> - if (printVar(vars, buf, bufsize, item, &done))
> - return 1;
> + if (printVar(vars, buf, bufsize, item, &done) < 0)
> + return -1;
Looks sane.
> @@ -417,7 +417,7 @@ ebiptablesAddRuleInst(virNWFilterRuleIns
>
> if (VIR_ALLOC(inst) < 0) {
> virReportOOMError();
> - return 1;
> + return -1;
Looks sane.
> @@ -492,7 +492,7 @@ ebtablesHandleEthHdr(virBufferPtr buf,
> err_exit:
> virBufferFreeAndReset(buf);
>
> - return 1;
> + return -1;
Looks sane.
> @@ -909,7 +909,7 @@ iptablesHandleSrcMacAddr(virBufferPtr bu
> err_exit:
> virBufferFreeAndReset(buf);
>
> - return 1;
> + return -1;
Looks sane.
> @@ -1057,7 +1057,7 @@ iptablesHandleIpHdr(virBufferPtr buf,
> @@ -1085,7 +1085,7 @@ err_exit:
> virBufferFreeAndReset(buf);
> virBufferFreeAndReset(afterStateMatch);
>
> - return 1;
> + return -1;
Looks sane.
> @@ -1154,7 +1154,7 @@ iptablesHandlePortData(virBufferPtr buf,
> return 0;
>
> err_exit:
> - return 1;
> + return -1;
Looks sane.
> @@ -1664,7 +1664,7 @@ printStateMatchFlags(int32_t flags, char
> if (virBufferError(&buf)) {
> virBufferFreeAndReset(&buf);
> virReportOOMError();
> - return 1;
> + return -1;
Looks sane.
> @@ -1704,8 +1704,8 @@ iptablesCreateRuleInstanceStateCtrl(virN
> }
>
> if (create && (rule->flags & IPTABLES_STATE_FLAGS)) {
> - if (printStateMatchFlags(rule->flags, &matchState))
> - return 1;
> + if (printStateMatchFlags(rule->flags, &matchState) < 0)
> + return -1;
Looks sane.
> @@ -2542,7 +2554,7 @@ ebiptablesCreateRuleInstance(enum virDom
> vars,
> res,
> rule->tt == VIR_NWFILTER_RULE_DIRECTION_INOUT);
> - if (rc)
> + if (rc < 0)
> return rc;
Looks sane.
> @@ -3111,7 +3123,7 @@ ebtablesApplyBasicRules(const char *ifna
> virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("cannot create rules since ebtables tool is "
> "missing."));
> - return 1;
> + return -1;
Comment before function needs touch up. Otherwise looks sane.
> @@ -3207,13 +3219,15 @@ ebtablesApplyDHCPOnlyRules(const char *i
> virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("cannot create rules since ebtables tool is "
> "missing."));
> - return 1;
> + return -1;
Looks sane, although I didn't closely audit if all uses of the
ebiptables_driver tech callbacks were adjusted.
> @@ -3322,7 +3336,7 @@ ebtablesApplyDropAllRules(const char *if
> virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("cannot create rules since ebtables tool is "
> "missing."));
> - return 1;
> + return -1;
Looks sane.
> @@ -4086,7 +4100,7 @@ ebiptablesDriverInit(bool privileged)
> _("firewall tools were not found or "
> "cannot be used"));
> ebiptablesDriverShutdown();
> - return ENOTSUP;
> + return -ENOTSUP;
Looks sane.
Overall, I found one or two nits between my two-stage review, but they
seemed easy to fix.
ACK. Up to you if you want to post a delta to this patch for your
touchups, or just go ahead and commit, since I know you have other
patches backed up behind this one.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111208/fa24cca6/attachment-0001.sig>
More information about the libvir-list
mailing list