summaryrefslogtreecommitdiff
path: root/net/core/dev_api.c
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2025-03-19 18:52:02 +0100
committerPaolo Abeni <pabeni@redhat.com>2025-03-19 18:52:03 +0100
commit05b815fc500be8c625f8eae86e58d32b468d53e7 (patch)
treedecb418263cf909476a8c5d33166e8477e58affb /net/core/dev_api.c
parent756f88ff9c6ae3d059180813102610c39ea99c27 (diff)
parent6dd132516f8e467f144f7871ff2708ce827417a1 (diff)
Merge branch 'net-bring-back-dev_addr_sem'
Stanislav Fomichev says: ==================== net: bring back dev_addr_sem Kohei reports an issue with dev_addr_sem conversion to netdev instance lock in [0]. Based on the discussion, switching to netdev instance lock to protect the address might not work for the devices that are not using netdev ops lock. Bring dev_addr_sem instance lock back but fix the ordering. 0: https://lore.kernel.org/netdev/20250308203835.60633-2-enjuk@amazon.com ==================== Link: https://patch.msgid.link/20250312190513.1252045-1-sdf@fomichev.me Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'net/core/dev_api.c')
-rw-r--r--net/core/dev_api.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/net/core/dev_api.c b/net/core/dev_api.c
index 1f0e24849bc6..8dbc60612100 100644
--- a/net/core/dev_api.c
+++ b/net/core/dev_api.c
@@ -84,6 +84,21 @@ void dev_set_group(struct net_device *dev, int new_group)
netdev_unlock_ops(dev);
}
+int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa,
+ struct netlink_ext_ack *extack)
+{
+ int ret;
+
+ down_write(&dev_addr_sem);
+ netdev_lock_ops(dev);
+ ret = netif_set_mac_address(dev, sa, extack);
+ netdev_unlock_ops(dev);
+ up_write(&dev_addr_sem);
+
+ return ret;
+}
+EXPORT_SYMBOL(dev_set_mac_address_user);
+
/**
* dev_change_net_namespace() - move device to different nethost namespace
* @dev: device
@@ -299,9 +314,9 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
{
int ret;
- netdev_lock(dev);
+ netdev_lock_ops(dev);
ret = netif_set_mac_address(dev, sa, extack);
- netdev_unlock(dev);
+ netdev_unlock_ops(dev);
return ret;
}