@@ -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 );
413414err_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 );
0 commit comments