ETHTOOL_MSG_STRSET_GET is the only op which sets allow_nodev_do.
When no device is provided it dumps static tables, there's no
need to hold rtnl_lock for this.
Not taking rtnl_lock is a minor win in itself so I think this
patch stands on its own merits. Later on it will be useful
to do locking only in paths which have access to a netdev,
so that we can decide which locks to take per-netdev.
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20260527162522.3344231-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
goto err_free;
ethnl_init_reply_data(reply_data, ops, req_info->dev);
- rtnl_lock();
- if (req_info->dev)
+ if (req_info->dev) {
+ rtnl_lock();
netdev_lock_ops(req_info->dev);
+ }
ret = ops->prepare_data(req_info, reply_data, info);
- if (req_info->dev)
+ if (req_info->dev) {
netdev_unlock_ops(req_info->dev);
- rtnl_unlock();
+ rtnl_unlock();
+ }
if (ret < 0)
goto err_dev;
ret = ops->reply_size(req_info, reply_data);
* @hdr_attr: attribute type for request header
* @req_info_size: size of request info
* @reply_data_size: size of reply data
- * @allow_nodev_do: allow non-dump request with no device identification
+ * @allow_nodev_do:
+ * Allow non-dump request with no device identification.
+ * Note that locks (rtnl_lock etc.) are only taken if device is set.
* @set_ntf_cmd: notification to generate on changes (SET)
* @parse_request:
* Parse request except common header (struct ethnl_req_info). Common