Commit 615d069d authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

llc: add net device refcount tracker

parent 66ce07f7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+3 −2
Original line number Diff line number Diff line
@@ -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;