mirror of https://gitee.com/openkylin/linux.git
mlxsw: spectrum: Extract work-scheduling into a new function
The boilerplate to schedule NETEVENT_IPV4_MPATH_HASH_UPDATE and NETEVENT_IPV6_MPATH_HASH_UPDATE handling is almost equivalent to that of NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE that's coming in the next patch. The only difference is which actual worker function should be called. Extract this boilerplate into a named function in order to allow reuse. Signed-off-by: Petr Machata <petrm@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d18c5d1995
commit
1f65a33fc7
|
@ -2436,17 +2436,36 @@ static void mlxsw_sp_router_mp_hash_event_work(struct work_struct *work)
|
|||
kfree(net_work);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_router_schedule_work(struct net *net,
|
||||
struct notifier_block *nb,
|
||||
void (*cb)(struct work_struct *))
|
||||
{
|
||||
struct mlxsw_sp_netevent_work *net_work;
|
||||
struct mlxsw_sp_router *router;
|
||||
|
||||
if (!net_eq(net, &init_net))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC);
|
||||
if (!net_work)
|
||||
return NOTIFY_BAD;
|
||||
|
||||
router = container_of(nb, struct mlxsw_sp_router, netevent_nb);
|
||||
INIT_WORK(&net_work->work, cb);
|
||||
net_work->mlxsw_sp = router->mlxsw_sp;
|
||||
mlxsw_core_schedule_work(&net_work->work);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_router_netevent_event(struct notifier_block *nb,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
struct mlxsw_sp_netevent_work *net_work;
|
||||
struct mlxsw_sp_port *mlxsw_sp_port;
|
||||
struct mlxsw_sp_router *router;
|
||||
struct mlxsw_sp *mlxsw_sp;
|
||||
unsigned long interval;
|
||||
struct neigh_parms *p;
|
||||
struct neighbour *n;
|
||||
struct net *net;
|
||||
|
||||
switch (event) {
|
||||
case NETEVENT_DELAY_PROBE_TIME_UPDATE:
|
||||
|
@ -2500,20 +2519,9 @@ static int mlxsw_sp_router_netevent_event(struct notifier_block *nb,
|
|||
break;
|
||||
case NETEVENT_IPV4_MPATH_HASH_UPDATE:
|
||||
case NETEVENT_IPV6_MPATH_HASH_UPDATE:
|
||||
net = ptr;
|
||||
return mlxsw_sp_router_schedule_work(ptr, nb,
|
||||
mlxsw_sp_router_mp_hash_event_work);
|
||||
|
||||
if (!net_eq(net, &init_net))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC);
|
||||
if (!net_work)
|
||||
return NOTIFY_BAD;
|
||||
|
||||
router = container_of(nb, struct mlxsw_sp_router, netevent_nb);
|
||||
INIT_WORK(&net_work->work, mlxsw_sp_router_mp_hash_event_work);
|
||||
net_work->mlxsw_sp = router->mlxsw_sp;
|
||||
mlxsw_core_schedule_work(&net_work->work);
|
||||
break;
|
||||
}
|
||||
|
||||
return NOTIFY_DONE;
|
||||
|
|
Loading…
Reference in New Issue