Commit e7f67c2b authored by Jens Axboe's avatar Jens Axboe
Browse files

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: default avatarChristian Brauner <brauner@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e7c30675
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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;