forked from Minki/linux
llc: add net device refcount tracker
Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
66ce07f780
commit
615d069dcf
@ -38,6 +38,7 @@ struct llc_sock {
|
||||
struct llc_addr laddr; /* lsap/mac pair */
|
||||
struct llc_addr daddr; /* dsap/mac pair */
|
||||
struct net_device *dev; /* device to send to remote */
|
||||
netdevice_tracker dev_tracker;
|
||||
u32 copied_seq; /* head of yet unread data */
|
||||
u8 retry_count; /* number of retries */
|
||||
u8 ack_must_be_send;
|
||||
|
@ -224,7 +224,7 @@ static int llc_ui_release(struct socket *sock)
|
||||
} else {
|
||||
release_sock(sk);
|
||||
}
|
||||
dev_put(llc->dev);
|
||||
dev_put_track(llc->dev, &llc->dev_tracker);
|
||||
sock_put(sk);
|
||||
llc_sk_free(sk);
|
||||
out:
|
||||
@ -295,6 +295,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
|
||||
llc->dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd);
|
||||
if (!llc->dev)
|
||||
goto out;
|
||||
netdev_tracker_alloc(llc->dev, &llc->dev_tracker, GFP_KERNEL);
|
||||
rc = -EUSERS;
|
||||
llc->laddr.lsap = llc_ui_autoport();
|
||||
if (!llc->laddr.lsap)
|
||||
@ -362,7 +363,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
|
||||
} else
|
||||
llc->dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd,
|
||||
addr->sllc_mac);
|
||||
dev_hold(llc->dev);
|
||||
dev_hold_track(llc->dev, &llc->dev_tracker, GFP_ATOMIC);
|
||||
rcu_read_unlock();
|
||||
if (!llc->dev)
|
||||
goto out;
|
||||
|
Loading…
Reference in New Issue
Block a user