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 @@ -249,11 +249,14 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
249249 struct j1939_priv * priv , * priv_new ;
250250 int ret ;
251251
252- priv = j1939_priv_get_by_ndev (ndev );
252+ spin_lock (& j1939_netdev_lock );
253+ priv = j1939_priv_get_by_ndev_locked (ndev );
253254 if (priv ) {
254255 kref_get (& priv -> rx_kref );
256+ spin_unlock (& j1939_netdev_lock );
255257 return priv ;
256258 }
259+ spin_unlock (& j1939_netdev_lock );
257260
258261 priv = j1939_priv_create (ndev );
259262 if (!priv )
@@ -269,10 +272,10 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
269272 /* Someone was faster than us, use their priv and roll
270273 * back our's.
271274 */
275+ kref_get (& priv_new -> rx_kref );
272276 spin_unlock (& j1939_netdev_lock );
273277 dev_put (ndev );
274278 kfree (priv );
275- kref_get (& priv_new -> rx_kref );
276279 return priv_new ;
277280 }
278281 j1939_priv_set (ndev , priv );
You can’t perform that action at this time.
0 commit comments