diff options
Diffstat (limited to 'net/switchdev/switchdev.c')
-rw-r--r-- | net/switchdev/switchdev.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index fe23fac4dc4b..cb20669bf6ce 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c | |||
@@ -356,7 +356,8 @@ static size_t switchdev_obj_size(const struct switchdev_obj *obj) | |||
356 | static int switchdev_port_obj_notify(enum switchdev_notifier_type nt, | 356 | static int switchdev_port_obj_notify(enum switchdev_notifier_type nt, |
357 | struct net_device *dev, | 357 | struct net_device *dev, |
358 | const struct switchdev_obj *obj, | 358 | const struct switchdev_obj *obj, |
359 | struct switchdev_trans *trans) | 359 | struct switchdev_trans *trans, |
360 | struct netlink_ext_ack *extack) | ||
360 | { | 361 | { |
361 | int rc; | 362 | int rc; |
362 | int err; | 363 | int err; |
@@ -379,7 +380,8 @@ static int switchdev_port_obj_notify(enum switchdev_notifier_type nt, | |||
379 | } | 380 | } |
380 | 381 | ||
381 | static int switchdev_port_obj_add_now(struct net_device *dev, | 382 | static int switchdev_port_obj_add_now(struct net_device *dev, |
382 | const struct switchdev_obj *obj) | 383 | const struct switchdev_obj *obj, |
384 | struct netlink_ext_ack *extack) | ||
383 | { | 385 | { |
384 | struct switchdev_trans trans; | 386 | struct switchdev_trans trans; |
385 | int err; | 387 | int err; |
@@ -397,7 +399,7 @@ static int switchdev_port_obj_add_now(struct net_device *dev, | |||
397 | 399 | ||
398 | trans.ph_prepare = true; | 400 | trans.ph_prepare = true; |
399 | err = switchdev_port_obj_notify(SWITCHDEV_PORT_OBJ_ADD, | 401 | err = switchdev_port_obj_notify(SWITCHDEV_PORT_OBJ_ADD, |
400 | dev, obj, &trans); | 402 | dev, obj, &trans, extack); |
401 | if (err) { | 403 | if (err) { |
402 | /* Prepare phase failed: abort the transaction. Any | 404 | /* Prepare phase failed: abort the transaction. Any |
403 | * resources reserved in the prepare phase are | 405 | * resources reserved in the prepare phase are |
@@ -417,7 +419,7 @@ static int switchdev_port_obj_add_now(struct net_device *dev, | |||
417 | 419 | ||
418 | trans.ph_prepare = false; | 420 | trans.ph_prepare = false; |
419 | err = switchdev_port_obj_notify(SWITCHDEV_PORT_OBJ_ADD, | 421 | err = switchdev_port_obj_notify(SWITCHDEV_PORT_OBJ_ADD, |
420 | dev, obj, &trans); | 422 | dev, obj, &trans, extack); |
421 | WARN(err, "%s: Commit of object (id=%d) failed.\n", dev->name, obj->id); | 423 | WARN(err, "%s: Commit of object (id=%d) failed.\n", dev->name, obj->id); |
422 | switchdev_trans_items_warn_destroy(dev, &trans); | 424 | switchdev_trans_items_warn_destroy(dev, &trans); |
423 | 425 | ||
@@ -430,7 +432,7 @@ static void switchdev_port_obj_add_deferred(struct net_device *dev, | |||
430 | const struct switchdev_obj *obj = data; | 432 | const struct switchdev_obj *obj = data; |
431 | int err; | 433 | int err; |
432 | 434 | ||
433 | err = switchdev_port_obj_add_now(dev, obj); | 435 | err = switchdev_port_obj_add_now(dev, obj, NULL); |
434 | if (err && err != -EOPNOTSUPP) | 436 | if (err && err != -EOPNOTSUPP) |
435 | netdev_err(dev, "failed (err=%d) to add object (id=%d)\n", | 437 | netdev_err(dev, "failed (err=%d) to add object (id=%d)\n", |
436 | err, obj->id); | 438 | err, obj->id); |
@@ -460,12 +462,13 @@ static int switchdev_port_obj_add_defer(struct net_device *dev, | |||
460 | * in case SWITCHDEV_F_DEFER flag is not set. | 462 | * in case SWITCHDEV_F_DEFER flag is not set. |
461 | */ | 463 | */ |
462 | int switchdev_port_obj_add(struct net_device *dev, | 464 | int switchdev_port_obj_add(struct net_device *dev, |
463 | const struct switchdev_obj *obj) | 465 | const struct switchdev_obj *obj, |
466 | struct netlink_ext_ack *extack) | ||
464 | { | 467 | { |
465 | if (obj->flags & SWITCHDEV_F_DEFER) | 468 | if (obj->flags & SWITCHDEV_F_DEFER) |
466 | return switchdev_port_obj_add_defer(dev, obj); | 469 | return switchdev_port_obj_add_defer(dev, obj); |
467 | ASSERT_RTNL(); | 470 | ASSERT_RTNL(); |
468 | return switchdev_port_obj_add_now(dev, obj); | 471 | return switchdev_port_obj_add_now(dev, obj, extack); |
469 | } | 472 | } |
470 | EXPORT_SYMBOL_GPL(switchdev_port_obj_add); | 473 | EXPORT_SYMBOL_GPL(switchdev_port_obj_add); |
471 | 474 | ||
@@ -473,7 +476,7 @@ static int switchdev_port_obj_del_now(struct net_device *dev, | |||
473 | const struct switchdev_obj *obj) | 476 | const struct switchdev_obj *obj) |
474 | { | 477 | { |
475 | return switchdev_port_obj_notify(SWITCHDEV_PORT_OBJ_DEL, | 478 | return switchdev_port_obj_notify(SWITCHDEV_PORT_OBJ_DEL, |
476 | dev, obj, NULL); | 479 | dev, obj, NULL, NULL); |
477 | } | 480 | } |
478 | 481 | ||
479 | static void switchdev_port_obj_del_deferred(struct net_device *dev, | 482 | static void switchdev_port_obj_del_deferred(struct net_device *dev, |