16
16
17
17
struct flow_offload_entry {
18
18
struct flow_offload flow ;
19
- struct nf_conn * ct ;
20
19
struct rcu_head rcu_head ;
21
20
};
22
21
@@ -79,7 +78,7 @@ flow_offload_alloc(struct nf_conn *ct, struct nf_flow_route *route)
79
78
if (!dst_hold_safe (route -> tuple [FLOW_OFFLOAD_DIR_REPLY ].dst ))
80
79
goto err_dst_cache_reply ;
81
80
82
- entry -> ct = ct ;
81
+ flow -> ct = ct ;
83
82
84
83
flow_offload_fill_dir (flow , ct , route , FLOW_OFFLOAD_DIR_ORIGINAL );
85
84
flow_offload_fill_dir (flow , ct , route , FLOW_OFFLOAD_DIR_REPLY );
@@ -158,8 +157,8 @@ void flow_offload_free(struct flow_offload *flow)
158
157
dst_release (flow -> tuplehash [FLOW_OFFLOAD_DIR_REPLY ].tuple .dst_cache );
159
158
e = container_of (flow , struct flow_offload_entry , flow );
160
159
if (flow -> flags & FLOW_OFFLOAD_DYING )
161
- nf_ct_delete (e -> ct , 0 , 0 );
162
- nf_ct_put (e -> ct );
160
+ nf_ct_delete (flow -> ct , 0 , 0 );
161
+ nf_ct_put (flow -> ct );
163
162
kfree_rcu (e , rcu_head );
164
163
}
165
164
EXPORT_SYMBOL_GPL (flow_offload_free );
@@ -232,34 +231,28 @@ static inline bool nf_flow_has_expired(const struct flow_offload *flow)
232
231
static void flow_offload_del (struct nf_flowtable * flow_table ,
233
232
struct flow_offload * flow )
234
233
{
235
- struct flow_offload_entry * e ;
236
-
237
234
rhashtable_remove_fast (& flow_table -> rhashtable ,
238
235
& flow -> tuplehash [FLOW_OFFLOAD_DIR_ORIGINAL ].node ,
239
236
nf_flow_offload_rhash_params );
240
237
rhashtable_remove_fast (& flow_table -> rhashtable ,
241
238
& flow -> tuplehash [FLOW_OFFLOAD_DIR_REPLY ].node ,
242
239
nf_flow_offload_rhash_params );
243
240
244
- e = container_of (flow , struct flow_offload_entry , flow );
245
- clear_bit (IPS_OFFLOAD_BIT , & e -> ct -> status );
241
+ clear_bit (IPS_OFFLOAD_BIT , & flow -> ct -> status );
246
242
247
243
if (nf_flow_has_expired (flow ))
248
- flow_offload_fixup_ct (e -> ct );
244
+ flow_offload_fixup_ct (flow -> ct );
249
245
else if (flow -> flags & FLOW_OFFLOAD_TEARDOWN )
250
- flow_offload_fixup_ct_timeout (e -> ct );
246
+ flow_offload_fixup_ct_timeout (flow -> ct );
251
247
252
248
flow_offload_free (flow );
253
249
}
254
250
255
251
void flow_offload_teardown (struct flow_offload * flow )
256
252
{
257
- struct flow_offload_entry * e ;
258
-
259
253
flow -> flags |= FLOW_OFFLOAD_TEARDOWN ;
260
254
261
- e = container_of (flow , struct flow_offload_entry , flow );
262
- flow_offload_fixup_ct_state (e -> ct );
255
+ flow_offload_fixup_ct_state (flow -> ct );
263
256
}
264
257
EXPORT_SYMBOL_GPL (flow_offload_teardown );
265
258
@@ -269,7 +262,6 @@ flow_offload_lookup(struct nf_flowtable *flow_table,
269
262
{
270
263
struct flow_offload_tuple_rhash * tuplehash ;
271
264
struct flow_offload * flow ;
272
- struct flow_offload_entry * e ;
273
265
int dir ;
274
266
275
267
tuplehash = rhashtable_lookup (& flow_table -> rhashtable , tuple ,
@@ -282,8 +274,7 @@ flow_offload_lookup(struct nf_flowtable *flow_table,
282
274
if (flow -> flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN ))
283
275
return NULL ;
284
276
285
- e = container_of (flow , struct flow_offload_entry , flow );
286
- if (unlikely (nf_ct_is_dying (e -> ct )))
277
+ if (unlikely (nf_ct_is_dying (flow -> ct )))
287
278
return NULL ;
288
279
289
280
return tuplehash ;
@@ -327,10 +318,8 @@ nf_flow_table_iterate(struct nf_flowtable *flow_table,
327
318
static void nf_flow_offload_gc_step (struct flow_offload * flow , void * data )
328
319
{
329
320
struct nf_flowtable * flow_table = data ;
330
- struct flow_offload_entry * e ;
331
321
332
- e = container_of (flow , struct flow_offload_entry , flow );
333
- if (nf_flow_has_expired (flow ) || nf_ct_is_dying (e -> ct ) ||
322
+ if (nf_flow_has_expired (flow ) || nf_ct_is_dying (flow -> ct ) ||
334
323
(flow -> flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN )))
335
324
flow_offload_del (flow_table , flow );
336
325
}
@@ -485,15 +474,13 @@ EXPORT_SYMBOL_GPL(nf_flow_table_init);
485
474
static void nf_flow_table_do_cleanup (struct flow_offload * flow , void * data )
486
475
{
487
476
struct net_device * dev = data ;
488
- struct flow_offload_entry * e ;
489
-
490
- e = container_of (flow , struct flow_offload_entry , flow );
491
477
492
478
if (!dev ) {
493
479
flow_offload_teardown (flow );
494
480
return ;
495
481
}
496
- if (net_eq (nf_ct_net (e -> ct ), dev_net (dev )) &&
482
+
483
+ if (net_eq (nf_ct_net (flow -> ct ), dev_net (dev )) &&
497
484
(flow -> tuplehash [0 ].tuple .iifidx == dev -> ifindex ||
498
485
flow -> tuplehash [1 ].tuple .iifidx == dev -> ifindex ))
499
486
flow_offload_dead (flow );
0 commit comments