rps_dev_flow_table_release(): no need to delay vfree()
The same story as with fib_trie patch - vfree() from RCU callbacks is legitimate now. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
0020356355
Коммит
243198d09f
|
@ -593,7 +593,6 @@ struct rps_dev_flow {
|
|||
struct rps_dev_flow_table {
|
||||
unsigned int mask;
|
||||
struct rcu_head rcu;
|
||||
struct work_struct free_work;
|
||||
struct rps_dev_flow flows[0];
|
||||
};
|
||||
#define RPS_DEV_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_dev_flow_table) + \
|
||||
|
|
|
@ -606,21 +606,11 @@ static ssize_t show_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
|
|||
return sprintf(buf, "%lu\n", val);
|
||||
}
|
||||
|
||||
static void rps_dev_flow_table_release_work(struct work_struct *work)
|
||||
{
|
||||
struct rps_dev_flow_table *table = container_of(work,
|
||||
struct rps_dev_flow_table, free_work);
|
||||
|
||||
vfree(table);
|
||||
}
|
||||
|
||||
static void rps_dev_flow_table_release(struct rcu_head *rcu)
|
||||
{
|
||||
struct rps_dev_flow_table *table = container_of(rcu,
|
||||
struct rps_dev_flow_table, rcu);
|
||||
|
||||
INIT_WORK(&table->free_work, rps_dev_flow_table_release_work);
|
||||
schedule_work(&table->free_work);
|
||||
vfree(table);
|
||||
}
|
||||
|
||||
static ssize_t store_rps_dev_flow_table_cnt(struct netdev_rx_queue *queue,
|
||||
|
|
Загрузка…
Ссылка в новой задаче