File tree Expand file tree Collapse file tree 1 file changed +5
-2
lines changed Expand file tree Collapse file tree 1 file changed +5
-2
lines changed Original file line number Diff line number Diff line change @@ -253,11 +253,14 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
253253 struct j1939_priv * priv , * priv_new ;
254254 int ret ;
255255
256- priv = j1939_priv_get_by_ndev (ndev );
256+ spin_lock (& j1939_netdev_lock );
257+ priv = j1939_priv_get_by_ndev_locked (ndev );
257258 if (priv ) {
258259 kref_get (& priv -> rx_kref );
260+ spin_unlock (& j1939_netdev_lock );
259261 return priv ;
260262 }
263+ spin_unlock (& j1939_netdev_lock );
261264
262265 priv = j1939_priv_create (ndev );
263266 if (!priv )
@@ -273,10 +276,10 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
273276 /* Someone was faster than us, use their priv and roll
274277 * back our's.
275278 */
279+ kref_get (& priv_new -> rx_kref );
276280 spin_unlock (& j1939_netdev_lock );
277281 dev_put (ndev );
278282 kfree (priv );
279- kref_get (& priv_new -> rx_kref );
280283 return priv_new ;
281284 }
282285 j1939_priv_set (ndev , priv );
You can’t perform that action at this time.
0 commit comments