On 2022-06-30 11:34 AM, Tao Liu wrote:
When netdev first opened by netdev_open(..., NULL, ...), netdev_class sets
to system by default, and auto_classified sets to true.

If netdev reopens by netdev_open(..., "system", ...), auto_classified
should be cleared. This will be used in next patch to fix lag issue.

Fixes: 8c2c225e481d ("netdev: Fix netdev_open() to track and recreate classless 
interfaces")
Signed-off-by: Tao Liu <thomas....@ucloud.cn>
---
  lib/netdev.c | 41 +++++++++++++++++++++++------------------
  1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/lib/netdev.c b/lib/netdev.c
index 8305f6c..b97408b 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -387,25 +387,30 @@ netdev_open(const char *name, const char *type, struct 
netdev **netdevp)
      ovs_mutex_lock(&netdev_mutex);
      netdev = shash_find_data(&netdev_shash, name);
- if (netdev &&
-        type && type[0] && strcmp(type, netdev->netdev_class->type)) {
-
-        if (netdev->auto_classified) {
-            /* If this device was first created without a classification type,
-             * for example due to routing or tunneling code, and they keep a
-             * reference, a "classified" call to open will fail. In this case
-             * we remove the classless device, and re-add it below. We remove
-             * the netdev from the shash, and change the sequence, so owners of
-             * the old classless device can release/cleanup. */
-            if (netdev->node) {
-                shash_delete(&netdev_shash, netdev->node);
-                netdev->node = NULL;
-                netdev_change_seq_changed(netdev);
-            }
+    if (netdev && type && type[0]) {
+        if (strcmp(type, netdev->netdev_class->type)) {
+
+            if (netdev->auto_classified) {
+                /* If this device was first created without a classification
+                 * type, for example due to routing or tunneling code, and they
+                 * keep a reference, a "classified" call to open will fail.
+                 * In this case we remove the classless device, and re-add it
+                 * below. We remove the netdev from the shash, and change the
+                 * sequence, so owners of the old classless device can
+                 * release/cleanup. */
+                if (netdev->node) {
+                    shash_delete(&netdev_shash, netdev->node);
+                    netdev->node = NULL;
+                    netdev_change_seq_changed(netdev);
+                }
- netdev = NULL;
-        } else {
-            error = EEXIST;
+                netdev = NULL;
+            } else {
+                error = EEXIST;
+            }
+        } else if (netdev->auto_classified) {
+            /* If netdev reopens of type "system", clear auto_classified */
+            netdev->auto_classified = false;
          }
      }

this fix you issue with lag?
netdev_open() is not being called more than once?

i'll take a little bit more this week and test a bit before acking.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to