Skip to content

Commit e4b8954

Browse files
edumazetkuba-moo
authored andcommitted
netlink: add net device refcount tracker to struct ethnl_req_info
Signed-off-by: Eric Dumazet <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent b606452 commit e4b8954

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

net/ethtool/netlink.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info,
141141
}
142142

143143
req_info->dev = dev;
144+
netdev_tracker_alloc(dev, &req_info->dev_tracker, GFP_KERNEL);
144145
req_info->flags = flags;
145146
return 0;
146147
}
@@ -399,7 +400,7 @@ static int ethnl_default_doit(struct sk_buff *skb, struct genl_info *info)
399400
ops->cleanup_data(reply_data);
400401

401402
genlmsg_end(rskb, reply_payload);
402-
dev_put(req_info->dev);
403+
dev_put_track(req_info->dev, &req_info->dev_tracker);
403404
kfree(reply_data);
404405
kfree(req_info);
405406
return genlmsg_reply(rskb, info);
@@ -411,7 +412,7 @@ static int ethnl_default_doit(struct sk_buff *skb, struct genl_info *info)
411412
if (ops->cleanup_data)
412413
ops->cleanup_data(reply_data);
413414
err_dev:
414-
dev_put(req_info->dev);
415+
dev_put_track(req_info->dev, &req_info->dev_tracker);
415416
kfree(reply_data);
416417
kfree(req_info);
417418
return ret;
@@ -547,7 +548,7 @@ static int ethnl_default_start(struct netlink_callback *cb)
547548
* same parser as for non-dump (doit) requests is used, it
548549
* would take reference to the device if it finds one
549550
*/
550-
dev_put(req_info->dev);
551+
dev_put_track(req_info->dev, &req_info->dev_tracker);
551552
req_info->dev = NULL;
552553
}
553554
if (ret < 0)
@@ -624,6 +625,7 @@ static void ethnl_default_notify(struct net_device *dev, unsigned int cmd,
624625
}
625626

626627
req_info->dev = dev;
628+
netdev_tracker_alloc(dev, &req_info->dev_tracker, GFP_KERNEL);
627629
req_info->flags |= ETHTOOL_FLAG_COMPACT_BITSETS;
628630

629631
ethnl_init_reply_data(reply_data, ops, dev);

net/ethtool/netlink.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ static inline unsigned int ethnl_reply_header_size(void)
222222
/**
223223
* struct ethnl_req_info - base type of request information for GET requests
224224
* @dev: network device the request is for (may be null)
225+
* @dev_tracker: refcount tracker for @dev reference
225226
* @flags: request flags common for all request types
226227
*
227228
* This is a common base for request specific structures holding data from
@@ -230,6 +231,7 @@ static inline unsigned int ethnl_reply_header_size(void)
230231
*/
231232
struct ethnl_req_info {
232233
struct net_device *dev;
234+
netdevice_tracker dev_tracker;
233235
u32 flags;
234236
};
235237

0 commit comments

Comments
 (0)