]> git.proxmox.com Git - ovs.git/commitdiff
dpif-linux: Open dpif despite notifier failures.
authorEthan Jackson <ethan@nicira.com>
Wed, 14 Sep 2011 18:26:21 +0000 (11:26 -0700)
committerEthan Jackson <ethan@nicira.com>
Fri, 16 Sep 2011 18:22:30 +0000 (11:22 -0700)
Before this patch, if dpif-linux failed to register a notifier it
would give up opening the datapath entirely.  This seems draconian
as a dpif can still perform the majority of its intended
functionality without vport notifications.

lib/dpif-linux.c

index 549c7e4463b97f7ca37cf0e68ec5ff6ff8c1106a..150c410eab04a265b30ea35a7a0c90f08f4df030 100644 (file)
@@ -160,7 +160,7 @@ static struct nl_sock *genl_sock;
 static struct nln *nln = NULL;
 
 static int dpif_linux_init(void);
-static int open_dpif(const struct dpif_linux_dp *, struct dpif **);
+static void open_dpif(const struct dpif_linux_dp *, struct dpif **);
 static bool dpif_linux_nln_parse(struct ofpbuf *, void *);
 static void dpif_linux_port_changed(const void *vport, void *dpif);
 
@@ -243,13 +243,13 @@ dpif_linux_open(const struct dpif_class *class OVS_UNUSED, const char *name,
     if (error) {
         return error;
     }
-    error = open_dpif(&dp, dpifp);
-    ofpbuf_delete(buf);
 
-    return error;
+    open_dpif(&dp, dpifp);
+    ofpbuf_delete(buf);
+    return 0;
 }
 
-static int
+static void
 open_dpif(const struct dpif_linux_dp *dp, struct dpif **dpifp)
 {
     struct dpif_linux *dpif;
@@ -258,9 +258,6 @@ open_dpif(const struct dpif_linux_dp *dp, struct dpif **dpifp)
     dpif = xmalloc(sizeof *dpif);
     dpif->port_notifier = nln_notifier_create(nln, dpif_linux_port_changed,
                                               dpif);
-    if (!dpif->port_notifier) {
-        goto error_free;
-    }
 
     dpif_init(&dpif->dpif, &dpif_linux_class, dp->name,
               dp->dp_ifindex, dp->dp_ifindex);
@@ -281,11 +278,6 @@ open_dpif(const struct dpif_linux_dp *dp, struct dpif **dpifp)
     for (i = 1; i < LRU_MAX_PORTS; i++) {
         dpif_linux_push_port(dpif, i);
     }
-    return 0;
-
-error_free:
-    free(dpif);
-    return EINVAL;
 }
 
 static void