Thread (9 messages) 9 messages, 2 authors, 2026-01-28

Re: [PATCH net-next V3 2/7] can: use netdev_put() instead of deprecated dev_put()

From: Oliver Hartkopp <socketcan@hartkopp.net>
Date: 2026-01-28 21:32:18
Also in: linux-can


On 28.01.26 22:10, Oliver Hartkopp via B4 Relay wrote:
From: Oliver Hartkopp <socketcan@hartkopp.net>

Checkpatch complained about using dev_put() in the following patch of this
series. Prepare the CAN subsystem to use netdev_put() consistently.
Sorry. This does not compile.

I looked at a code where dev_put() was just replaced by netdev_put().

But recently a netdevice tracker has been added :-/

Will send a V4 version where also hopefully I get the "b4 prep 
--auto-to-cc" working ...

Best regards,
Oliver
quoted hunk ↗ jump to hunk
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
---
  net/can/bcm.c          | 18 +++++++++---------
  net/can/isotp.c        | 18 +++++++++---------
  net/can/j1939/main.c   |  6 +++---
  net/can/j1939/socket.c |  8 ++++----
  net/can/raw.c          |  6 +++---
  5 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/net/can/bcm.c b/net/can/bcm.c
index 8ed60f18c2eaff7053cb2c76e5e4cf1124dd3ac5..f76d60252803e62f438fd1936f366008698172e7 100644
--- a/net/can/bcm.c
+++ b/net/can/bcm.c
@@ -339,11 +339,11 @@ static void bcm_can_tx(struct bcm_op *op)
  	if (op->count > 0)
  		op->count--;
  
  	spin_unlock_bh(&op->bcm_tx_lock);
  out:
-	dev_put(dev);
+	netdev_put(dev);
  }
  
  /*
   * bcm_send_to_user - send a BCM message to the userspace
   *                    (consisting of bcm_msg_head + x CAN frames)
@@ -852,11 +852,11 @@ static int bcm_delete_rx_op(struct list_head *ops, struct bcm_msg_head *mh,
  
  					dev = dev_get_by_index(sock_net(op->sk),
  							       op->ifindex);
  					if (dev) {
  						bcm_rx_unreg(dev, op);
-						dev_put(dev);
+						netdev_put(dev);
  					}
  				}
  			} else
  				can_rx_unregister(sock_net(op->sk), NULL,
  						  op->can_id,
@@ -1290,11 +1290,11 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
  						      REGMASK(op->can_id),
  						      bcm_rx_handler, op,
  						      "bcm", sk);
  
  				op->rx_reg_dev = dev;
-				dev_put(dev);
+				netdev_put(dev);
  			}
  
  		} else
  			err = can_rx_register(sock_net(sk), NULL, op->can_id,
  					      REGMASK(op->can_id),
@@ -1344,11 +1344,11 @@ static int bcm_tx_send(struct msghdr *msg, int ifindex, struct sock *sk,
  
  	can_skb_prv(skb)->ifindex = dev->ifindex;
  	skb->dev = dev;
  	can_skb_set_owner(skb, sk);
  	err = can_send(skb, 1); /* send with loopback */
-	dev_put(dev);
+	netdev_put(dev);
  
  	if (err)
  		return err;
  
  	return cfsiz + MHSIZ;
@@ -1403,15 +1403,15 @@ static int bcm_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
  			dev = dev_get_by_index(sock_net(sk), ifindex);
  			if (!dev)
  				return -ENODEV;
  
  			if (dev->type != ARPHRD_CAN) {
-				dev_put(dev);
+				netdev_put(dev);
  				return -ENODEV;
  			}
  
-			dev_put(dev);
+			netdev_put(dev);
  		}
  	}
  
  	lock_sock(sk);
  
@@ -1622,11 +1622,11 @@ static int bcm_release(struct socket *sock)
  				struct net_device *dev;
  
  				dev = dev_get_by_index(net, op->ifindex);
  				if (dev) {
  					bcm_rx_unreg(dev, op);
-					dev_put(dev);
+					netdev_put(dev);
  				}
  			}
  		} else
  			can_rx_unregister(net, NULL, op->can_id,
  					  REGMASK(op->can_id),
@@ -1682,17 +1682,17 @@ static int bcm_connect(struct socket *sock, struct sockaddr_unsized *uaddr, int
  		if (!dev) {
  			ret = -ENODEV;
  			goto fail;
  		}
  		if (dev->type != ARPHRD_CAN) {
-			dev_put(dev);
+			netdev_put(dev);
  			ret = -ENODEV;
  			goto fail;
  		}
  
  		bo->ifindex = dev->ifindex;
-		dev_put(dev);
+		netdev_put(dev);
  
  	} else {
  		/* no interface reference for ifindex = 0 ('any' CAN device) */
  		bo->ifindex = 0;
  	}
diff --git a/net/can/isotp.c b/net/can/isotp.c
index 4bb60b8f9b96188a328e77be2fdefcb879da1089..b36173db119c85a6ef74a172236c08b372b875a9 100644
--- a/net/can/isotp.c
+++ b/net/can/isotp.c
@@ -258,11 +258,11 @@ static int isotp_send_fc(struct sock *sk, int ae, u8 flowstatus)
  	can_send_ret = can_send(nskb, 1);
  	if (can_send_ret)
  		pr_notice_once("can-isotp: %s: can_send_ret %pe\n",
  			       __func__, ERR_PTR(can_send_ret));
  
-	dev_put(dev);
+	netdev_put(dev);
  
  	/* reset blocksize counter */
  	so->rx.bs = 0;
  
  	/* reset last CF frame rx timestamp for rx stmin enforcement */
@@ -771,11 +771,11 @@ static void isotp_send_cframe(struct isotp_sock *so)
  	if (!dev)
  		return;
  
  	skb = alloc_skb(so->ll.mtu + sizeof(struct can_skb_priv), GFP_ATOMIC);
  	if (!skb) {
-		dev_put(dev);
+		netdev_put(dev);
  		return;
  	}
  
  	can_skb_reserve(skb);
  	can_skb_prv(skb)->ifindex = dev->ifindex;
@@ -809,11 +809,11 @@ static void isotp_send_cframe(struct isotp_sock *so)
  		pr_notice_once("can-isotp: %s: can_send_ret %pe\n",
  			       __func__, ERR_PTR(can_send_ret));
  		if (can_send_ret == -ENOBUFS)
  			pr_notice_once("can-isotp: tx queue is full\n");
  	}
-	dev_put(dev);
+	netdev_put(dev);
  }
  
  static void isotp_create_fframe(struct canfd_frame *cf, struct isotp_sock *so,
  				int ae)
  {
@@ -999,11 +999,11 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
  	}
  
  	skb = sock_alloc_send_skb(sk, so->ll.mtu + sizeof(struct can_skb_priv),
  				  msg->msg_flags & MSG_DONTWAIT, &err);
  	if (!skb) {
-		dev_put(dev);
+		netdev_put(dev);
  		goto err_out_drop;
  	}
  
  	can_skb_reserve(skb);
  	can_skb_prv(skb)->ifindex = dev->ifindex;
@@ -1081,11 +1081,11 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
  	cf->flags = so->ll.tx_flags;
  
  	skb->dev = dev;
  	skb->sk = sk;
  	err = can_send(skb, 1);
-	dev_put(dev);
+	netdev_put(dev);
  	if (err) {
  		pr_notice_once("can-isotp: %s: can_send_ret %pe\n",
  			       __func__, ERR_PTR(err));
  
  		/* no transmission -> no timeout monitoring */
@@ -1212,11 +1212,11 @@ static int isotp_release(struct socket *sock)
  							  isotp_rcv, sk);
  
  				can_rx_unregister(net, dev, so->txid,
  						  SINGLE_MASK(so->txid),
  						  isotp_rcv_echo, sk);
-				dev_put(dev);
+				netdev_put(dev);
  				synchronize_rcu();
  			}
  		}
  	}
  
@@ -1304,16 +1304,16 @@ static int isotp_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int l
  	if (!dev) {
  		err = -ENODEV;
  		goto out;
  	}
  	if (dev->type != ARPHRD_CAN) {
-		dev_put(dev);
+		netdev_put(dev);
  		err = -ENODEV;
  		goto out;
  	}
  	if (READ_ONCE(dev->mtu) < so->ll.mtu) {
-		dev_put(dev);
+		netdev_put(dev);
  		err = -EINVAL;
  		goto out;
  	}
  	if (!(dev->flags & IFF_UP))
  		notify_enetdown = 1;
@@ -1329,11 +1329,11 @@ static int isotp_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int l
  
  	/* register for echo skb's */
  	can_rx_register(net, dev, tx_id, SINGLE_MASK(tx_id),
  			isotp_rcv_echo, sk, "isotpe", sk);
  
-	dev_put(dev);
+	netdev_put(dev);
  
  	/* switch to new settings */
  	so->ifindex = ifindex;
  	so->rxid = rx_id;
  	so->txid = tx_id;
diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c
index a93af55df5fd500fa5d564160ad563a3883d2eac..dadf5be529070dcb4c077e68049e091511ef5361 100644
--- a/net/can/j1939/main.c
+++ b/net/can/j1939/main.c
@@ -161,11 +161,11 @@ static void __j1939_priv_release(struct kref *kref)
  
  	WARN_ON_ONCE(!list_empty(&priv->active_session_list));
  	WARN_ON_ONCE(!list_empty(&priv->ecus));
  	WARN_ON_ONCE(!list_empty(&priv->j1939_socks));
  
-	dev_put(ndev);
+	netdev_put(ndev);
  	kfree(priv);
  }
  
  void j1939_priv_put(struct j1939_priv *priv)
  {
@@ -279,11 +279,11 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
  		/* Someone was faster than us, use their priv and roll
  		 * back our's.
  		 */
  		kref_get(&priv_new->rx_kref);
  		mutex_unlock(&j1939_netdev_lock);
-		dev_put(ndev);
+		netdev_put(ndev);
  		kfree(priv);
  		return priv_new;
  	}
  	j1939_priv_set(ndev, priv);
  
@@ -296,11 +296,11 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
  
   out_priv_put:
  	j1939_priv_set(ndev, NULL);
  	mutex_unlock(&j1939_netdev_lock);
  
-	dev_put(ndev);
+	netdev_put(ndev);
  	kfree(priv);
  
  	return ERR_PTR(ret);
  }
  
diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c
index 1589e8ca634ecc2b59eb0c2a1e48f546fafccbe0..ad188a86790f269b8a9d022e67d0ef3ea8560349 100644
--- a/net/can/j1939/socket.c
+++ b/net/can/j1939/socket.c
@@ -481,30 +481,30 @@ static int j1939_sk_bind(struct socket *sock, struct sockaddr_unsized *uaddr, in
  			ret = -ENODEV;
  			goto out_release_sock;
  		}
  
  		if (ndev->reg_state != NETREG_REGISTERED) {
-			dev_put(ndev);
+			netdev_put(ndev);
  			ret = -ENODEV;
  			goto out_release_sock;
  		}
  
  		can_ml = can_get_ml_priv(ndev);
  		if (!can_ml) {
-			dev_put(ndev);
+			netdev_put(ndev);
  			ret = -ENODEV;
  			goto out_release_sock;
  		}
  
  		if (!(ndev->flags & IFF_UP)) {
-			dev_put(ndev);
+			netdev_put(ndev);
  			ret = -ENETDOWN;
  			goto out_release_sock;
  		}
  
  		priv = j1939_netdev_start(ndev);
-		dev_put(ndev);
+		netdev_put(ndev);
  		if (IS_ERR(priv)) {
  			ret = PTR_ERR(priv);
  			goto out_release_sock;
  		}
  
diff --git a/net/can/raw.c b/net/can/raw.c
index fb4f9c854df04d90ed6bd4601c616ac39bb85ad9..cf217671d9ce9419c5e32f926bf64df5f95e4a1f 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -518,11 +518,11 @@ static int raw_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int len
  			netdev_hold(ro->dev, &ro->dev_tracker, GFP_KERNEL);
  	}
  
  out_put_dev:
  	/* remove potential reference from dev_get_by_index() */
-	dev_put(dev);
+	netdev_put(dev);
  out:
  	release_sock(sk);
  	rtnl_unlock();
  
  	if (notify_enetdown) {
@@ -989,21 +989,21 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
  
  	skb_setup_tx_timestamp(skb, &sockc);
  
  	err = can_send(skb, ro->loopback);
  
-	dev_put(dev);
+	netdev_put(dev);
  
  	if (err)
  		goto send_failed;
  
  	return size;
  
  free_skb:
  	kfree_skb(skb);
  put_dev:
-	dev_put(dev);
+	netdev_put(dev);
  send_failed:
  	return err;
  }
  
  static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help