mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 05:44:45 +01:00
netfilter: nft_quota: use atomic64_xchg for reset
Use atomic64_xchg() to atomically read and zero the consumed value on reset, which is simpler than the previous read+sub pattern and doesn't require lock serialization. Fixes:bd662c4218("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests") Fixes:3d483faa66("netfilter: nf_tables: Add locking for NFT_MSG_GETSETELEM_RESET requests") Fixes:3cb03edb4d("netfilter: nf_tables: Add locking for NFT_MSG_GETRULE_RESET requests") Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Brian Witte <brianwitte@mailfence.com> Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
parent
779c60a519
commit
30c4d7fb59
1 changed files with 7 additions and 6 deletions
|
|
@ -140,11 +140,16 @@ static int nft_quota_do_dump(struct sk_buff *skb, struct nft_quota *priv,
|
|||
u64 consumed, consumed_cap, quota;
|
||||
u32 flags = priv->flags;
|
||||
|
||||
/* Since we inconditionally increment consumed quota for each packet
|
||||
/* Since we unconditionally increment consumed quota for each packet
|
||||
* that we see, don't go over the quota boundary in what we send to
|
||||
* userspace.
|
||||
*/
|
||||
consumed = atomic64_read(priv->consumed);
|
||||
if (reset) {
|
||||
consumed = atomic64_xchg(priv->consumed, 0);
|
||||
clear_bit(NFT_QUOTA_DEPLETED_BIT, &priv->flags);
|
||||
} else {
|
||||
consumed = atomic64_read(priv->consumed);
|
||||
}
|
||||
quota = atomic64_read(&priv->quota);
|
||||
if (consumed >= quota) {
|
||||
consumed_cap = quota;
|
||||
|
|
@ -160,10 +165,6 @@ static int nft_quota_do_dump(struct sk_buff *skb, struct nft_quota *priv,
|
|||
nla_put_be32(skb, NFTA_QUOTA_FLAGS, htonl(flags)))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (reset) {
|
||||
atomic64_sub(consumed, priv->consumed);
|
||||
clear_bit(NFT_QUOTA_DEPLETED_BIT, &priv->flags);
|
||||
}
|
||||
return 0;
|
||||
|
||||
nla_put_failure:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue