Skip to content

Commit

Permalink
netfilter: nft_set_rbtree: Use sequence counter with associated rwlock
Browse files Browse the repository at this point in the history
A sequence counter write side critical section must be protected by some
form of locking to serialize writers. A plain seqcount_t does not
contain the information of which lock must be held when entering a write
side critical section.

Use the new seqcount_rwlock_t data type, which allows to associate a
rwlock with the sequence counter. This enables lockdep to verify that
the rwlock used for writer serialization is held when the write side
critical section is entered.

If lockdep is disabled this lock association is compiled out and has
neither storage size nor runtime overhead.

Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20200720155530.1173732-16-a.darwish@linutronix.de
  • Loading branch information
Ahmed S. Darwish authored and Peter Zijlstra committed Jul 29, 2020
1 parent 8201d92 commit b901892
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions net/netfilter/nft_set_rbtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
struct nft_rbtree {
struct rb_root root;
rwlock_t lock;
seqcount_t count;
seqcount_rwlock_t count;
struct delayed_work gc_work;
};

Expand Down Expand Up @@ -523,7 +523,7 @@ static int nft_rbtree_init(const struct nft_set *set,
struct nft_rbtree *priv = nft_set_priv(set);

rwlock_init(&priv->lock);
seqcount_init(&priv->count);
seqcount_rwlock_init(&priv->count, &priv->lock);
priv->root = RB_ROOT;

INIT_DEFERRABLE_WORK(&priv->gc_work, nft_rbtree_gc);
Expand Down

0 comments on commit b901892

Please sign in to comment.