|
@@ -1269,7 +1269,12 @@ static void netvsc_link_change(struct work_struct *w)
|
|
|
bool notify = false, reschedule = false;
|
|
bool notify = false, reschedule = false;
|
|
|
unsigned long flags, next_reconfig, delay;
|
|
unsigned long flags, next_reconfig, delay;
|
|
|
|
|
|
|
|
- rtnl_lock();
|
|
|
|
|
|
|
+ /* if changes are happening, comeback later */
|
|
|
|
|
+ if (!rtnl_trylock()) {
|
|
|
|
|
+ schedule_delayed_work(&ndev_ctx->dwork, LINKCHANGE_INT);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
net_device = rtnl_dereference(ndev_ctx->nvdev);
|
|
net_device = rtnl_dereference(ndev_ctx->nvdev);
|
|
|
if (!net_device)
|
|
if (!net_device)
|
|
|
goto out_unlock;
|
|
goto out_unlock;
|