ofproto-dpif: Query port existence by name to prevent warnings.
authorJustin Pettit <jpettit@nicira.com>
Fri, 16 Nov 2012 07:00:39 +0000 (23:00 -0800)
committerJustin Pettit <jpettit@nicira.com>
Fri, 16 Nov 2012 20:35:55 +0000 (12:35 -0800)
The port_destruct() function checks if the port still exists in the
datapath to see if additional cleanup is necessary.  It used
dpif_port_query_by_number(), since the datapath port number is readily
available and cheap to use as a lookup handle.  Unfortunately, that
function logs a warning message if a port with that number doesn't exist
(because the datapath did remove it), which is confusing.  The
dpif_port_query_by_name() function doesn't log such an warning, so use
it instead.

Signed-off-by: Justin Pettit <jpettit@nicira.com>
ofproto/ofproto-dpif.c

index 098a43ee48453f1d123cb1c9c9ca49e271adf2ad..cc37d947fb6d871c67633ec2b6aae3a9d28b1834 100644 (file)
@@ -1538,19 +1538,17 @@ port_destruct(struct ofport *port_)
 {
     struct ofport_dpif *port = ofport_dpif_cast(port_);
     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
-    struct dpif_port dpif_port;
+    const char *devname = netdev_get_name(port->up.netdev);
 
-    if (!dpif_port_query_by_number(ofproto->backer->dpif,
-                                   port->odp_port, &dpif_port)) {
+    if (dpif_port_exists(ofproto->backer->dpif, devname)) {
         /* The underlying device is still there, so delete it.  This
          * happens when the ofproto is being destroyed, since the caller
          * assumes that removal of attached ports will happen as part of
          * destruction. */
         dpif_port_del(ofproto->backer->dpif, port->odp_port);
-        dpif_port_destroy(&dpif_port);
     }
 
-    sset_find_and_delete(&ofproto->ports, netdev_get_name(port->up.netdev));
+    sset_find_and_delete(&ofproto->ports, devname);
     hmap_remove(&ofproto->backer->odp_to_ofport_map, &port->odp_port_node);
     ofproto->need_revalidate = REV_RECONFIGURE;
     bundle_remove(port_);