mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
io_uring/bpf_filter: add ref counts to struct io_bpf_filter
In preparation for allowing inheritance of BPF filters and filter tables, add a reference count to the filter. This allows multiple tables to safely include the same filter. Reviewed-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
e7c30675a7
commit
e7f67c2be7
1 changed files with 7 additions and 0 deletions
|
|
@ -15,6 +15,7 @@
|
|||
#include "openclose.h"
|
||||
|
||||
struct io_bpf_filter {
|
||||
refcount_t refs;
|
||||
struct bpf_prog *prog;
|
||||
struct io_bpf_filter *next;
|
||||
};
|
||||
|
|
@ -125,6 +126,11 @@ static void io_free_bpf_filters(struct rcu_head *head)
|
|||
*/
|
||||
if (f == &dummy_filter)
|
||||
break;
|
||||
|
||||
/* Someone still holds a ref, stop iterating. */
|
||||
if (!refcount_dec_and_test(&f->refs))
|
||||
break;
|
||||
|
||||
bpf_prog_destroy(f->prog);
|
||||
kfree(f);
|
||||
f = next;
|
||||
|
|
@ -298,6 +304,7 @@ int io_register_bpf_filter(struct io_restriction *res,
|
|||
ret = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
refcount_set(&filter->refs, 1);
|
||||
filter->prog = prog;
|
||||
res->bpf_filters = filters;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue