out_rtnl:
        rtnl_unlock();
 out_dev_put:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev_put:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
  
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 
 out_rtnl:
        rtnl_unlock();
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
        ethnl_ops_complete(dev);
 out_rtnl:
        rtnl_unlock();
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
        u32                     flags;
 };
 
+static inline void ethnl_parse_header_dev_put(struct ethnl_req_info *req_info)
+{
+       dev_put_track(req_info->dev, &req_info->dev_tracker);
+}
+
 /**
  * struct ethnl_reply_data - base type of reply data for GET requests
  * @dev:       device for current reply message; in single shot requests it is
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
        if (ret)
                goto err_free_msg;
        rtnl_unlock();
-       dev_put(req_info.dev);
+       ethnl_parse_header_dev_put(&req_info);
        genlmsg_end(rskb, reply_payload);
 
        return genlmsg_reply(rskb, info);
        nlmsg_free(rskb);
 err_unlock_rtnl:
        rtnl_unlock();
-       dev_put(req_info.dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }
 
                                         sock_net(cb->skb->sk), cb->extack,
                                         false);
        if (ctx->req_info.dev) {
-               dev_put(ctx->req_info.dev);
+               ethnl_parse_header_dev_put(&ctx->req_info);
                ctx->req_info.dev = NULL;
        }
 
 
 out_rtnl:
        rtnl_unlock();
 out_dev:
-       dev_put(dev);
+       ethnl_parse_header_dev_put(&req_info);
        return ret;
 }