static void mlx5_lag_fib_event_flush(struct notifier_block *nb)
 {
        struct lag_mp *mp = container_of(nb, struct lag_mp, fib_nb);
-       struct mlx5_lag *ldev = container_of(mp, struct mlx5_lag, lag_mp);
 
-       flush_workqueue(ldev->wq);
+       flush_workqueue(mp->wq);
 }
 
 struct mlx5_fib_event_work {
                return NOTIFY_DONE;
        }
 
-       queue_work(ldev->wq, &fib_work->work);
+       queue_work(mp->wq, &fib_work->work);
 
        return NOTIFY_DONE;
 }
        if (mp->fib_nb.notifier_call)
                return 0;
 
+       mp->wq = create_singlethread_workqueue("mlx5_lag_mp");
+       if (!mp->wq)
+               return -ENOMEM;
+
        mp->fib_nb.notifier_call = mlx5_lag_fib_event;
        err = register_fib_notifier(&init_net, &mp->fib_nb,
                                    mlx5_lag_fib_event_flush, NULL);
-       if (err)
+       if (err) {
+               destroy_workqueue(mp->wq);
                mp->fib_nb.notifier_call = NULL;
+       }
 
        return err;
 }
                return;
 
        unregister_fib_notifier(&init_net, &mp->fib_nb);
+       destroy_workqueue(mp->wq);
        mp->fib_nb.notifier_call = NULL;
 }