Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says: ==================== Netfilter/IPVS updates for net-next The following patchset contains Netfilter/IPVS updates for your net-next tree. A couple of new features for nf_tables, and unsorted cleanups and incremental updates for the Netfilter tree. More specifically, they are: 1) Allow to check for TCP option presence via nft_exthdr, patch from Phil Sutter. 2) Add symmetric hash support to nft_hash, from Laura Garcia Liebana. 3) Use pr_cont() in ebt_log, from Joe Perches. 4) Remove some dead code in arp_tables reported via static analysis tool, from Colin Ian King. 5) Consolidate nf_tables expression validation, from Liping Zhang. 6) Consolidate set lookup via nft_set_lookup(). 7) Remove unnecessary rcu read lock side in bridge netfilter, from Florian Westphal. 8) Remove unused variable in nf_reject_ipv4, from Tahee Yoo. 9) Pass nft_ctx struct to object initialization indirections, from Florian Westphal. 10) Add code to integrate conntrack helper into nf_tables, also from Florian. 11) Allow to check if interface index or name exists via NFTA_FIB_F_PRESENT, from Phil Sutter. 12) Simplify resolve_normal_ct(), from Florian. 13) Use per-limit spinlock in nft_limit and xt_limit, from Liping Zhang. 14) Use rwlock in nft_set_rbtree set, also from Liping Zhang. 15) One patch to remove a useless printk at netns init path in ipvs, and several patches to document IPVS knobs. 16) Use refcount_t for reference counter in the Netfilter/IPVS code, from Elena Reshetova. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
#include <linux/list.h> /* for struct list_head */
|
||||
#include <linux/spinlock.h> /* for struct rwlock_t */
|
||||
#include <linux/atomic.h> /* for struct atomic_t */
|
||||
#include <linux/refcount.h> /* for struct refcount_t */
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/bug.h>
|
||||
@@ -525,7 +527,7 @@ struct ip_vs_conn {
|
||||
struct netns_ipvs *ipvs;
|
||||
|
||||
/* counter and timer */
|
||||
atomic_t refcnt; /* reference count */
|
||||
refcount_t refcnt; /* reference count */
|
||||
struct timer_list timer; /* Expiration timer */
|
||||
volatile unsigned long timeout; /* timeout */
|
||||
|
||||
@@ -667,7 +669,7 @@ struct ip_vs_dest {
|
||||
atomic_t conn_flags; /* flags to copy to conn */
|
||||
atomic_t weight; /* server weight */
|
||||
|
||||
atomic_t refcnt; /* reference counter */
|
||||
refcount_t refcnt; /* reference counter */
|
||||
struct ip_vs_stats stats; /* statistics */
|
||||
unsigned long idle_start; /* start time, jiffies */
|
||||
|
||||
@@ -1211,14 +1213,14 @@ struct ip_vs_conn * ip_vs_conn_out_get_proto(struct netns_ipvs *ipvs, int af,
|
||||
*/
|
||||
static inline bool __ip_vs_conn_get(struct ip_vs_conn *cp)
|
||||
{
|
||||
return atomic_inc_not_zero(&cp->refcnt);
|
||||
return refcount_inc_not_zero(&cp->refcnt);
|
||||
}
|
||||
|
||||
/* put back the conn without restarting its timer */
|
||||
static inline void __ip_vs_conn_put(struct ip_vs_conn *cp)
|
||||
{
|
||||
smp_mb__before_atomic();
|
||||
atomic_dec(&cp->refcnt);
|
||||
refcount_dec(&cp->refcnt);
|
||||
}
|
||||
void ip_vs_conn_put(struct ip_vs_conn *cp);
|
||||
void ip_vs_conn_fill_cport(struct ip_vs_conn *cp, __be16 cport);
|
||||
@@ -1410,18 +1412,18 @@ void ip_vs_try_bind_dest(struct ip_vs_conn *cp);
|
||||
|
||||
static inline void ip_vs_dest_hold(struct ip_vs_dest *dest)
|
||||
{
|
||||
atomic_inc(&dest->refcnt);
|
||||
refcount_inc(&dest->refcnt);
|
||||
}
|
||||
|
||||
static inline void ip_vs_dest_put(struct ip_vs_dest *dest)
|
||||
{
|
||||
smp_mb__before_atomic();
|
||||
atomic_dec(&dest->refcnt);
|
||||
refcount_dec(&dest->refcnt);
|
||||
}
|
||||
|
||||
static inline void ip_vs_dest_put_and_free(struct ip_vs_dest *dest)
|
||||
{
|
||||
if (atomic_dec_and_test(&dest->refcnt))
|
||||
if (refcount_dec_and_test(&dest->refcnt))
|
||||
kfree(dest);
|
||||
}
|
||||
|
||||
|
@@ -5,6 +5,8 @@
|
||||
#ifndef _NF_CONNTRACK_EXPECT_H
|
||||
#define _NF_CONNTRACK_EXPECT_H
|
||||
|
||||
#include <linux/refcount.h>
|
||||
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
#include <net/netfilter/nf_conntrack_zones.h>
|
||||
|
||||
@@ -37,7 +39,7 @@ struct nf_conntrack_expect {
|
||||
struct timer_list timeout;
|
||||
|
||||
/* Usage count. */
|
||||
atomic_t use;
|
||||
refcount_t use;
|
||||
|
||||
/* Flags */
|
||||
unsigned int flags;
|
||||
|
@@ -4,6 +4,7 @@
|
||||
#include <net/net_namespace.h>
|
||||
#include <linux/netfilter/nf_conntrack_common.h>
|
||||
#include <linux/netfilter/nf_conntrack_tuple_common.h>
|
||||
#include <linux/refcount.h>
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
#include <net/netfilter/nf_conntrack_extend.h>
|
||||
|
||||
@@ -12,7 +13,7 @@
|
||||
struct ctnl_timeout {
|
||||
struct list_head head;
|
||||
struct rcu_head rcu_head;
|
||||
atomic_t refcnt;
|
||||
refcount_t refcnt;
|
||||
char name[CTNL_TIMEOUT_NAME_MAX];
|
||||
__u16 l3num;
|
||||
struct nf_conntrack_l4proto *l4proto;
|
||||
|
@@ -385,10 +385,11 @@ static inline struct nft_set *nft_set_container_of(const void *priv)
|
||||
return (void *)priv - offsetof(struct nft_set, data);
|
||||
}
|
||||
|
||||
struct nft_set *nf_tables_set_lookup(const struct nft_table *table,
|
||||
const struct nlattr *nla, u8 genmask);
|
||||
struct nft_set *nf_tables_set_lookup_byid(const struct net *net,
|
||||
const struct nlattr *nla, u8 genmask);
|
||||
struct nft_set *nft_set_lookup(const struct net *net,
|
||||
const struct nft_table *table,
|
||||
const struct nlattr *nla_set_name,
|
||||
const struct nlattr *nla_set_id,
|
||||
u8 genmask);
|
||||
|
||||
static inline unsigned long nft_set_gc_interval(const struct nft_set *set)
|
||||
{
|
||||
@@ -1016,7 +1017,8 @@ struct nft_object_type {
|
||||
unsigned int maxattr;
|
||||
struct module *owner;
|
||||
const struct nla_policy *policy;
|
||||
int (*init)(const struct nlattr * const tb[],
|
||||
int (*init)(const struct nft_ctx *ctx,
|
||||
const struct nlattr *const tb[],
|
||||
struct nft_object *obj);
|
||||
void (*destroy)(struct nft_object *obj);
|
||||
int (*dump)(struct sk_buff *skb,
|
||||
|
@@ -32,6 +32,6 @@ void nft_fib6_eval_type(const struct nft_expr *expr, struct nft_regs *regs,
|
||||
void nft_fib6_eval(const struct nft_expr *expr, struct nft_regs *regs,
|
||||
const struct nft_pktinfo *pkt);
|
||||
|
||||
void nft_fib_store_result(void *reg, enum nft_fib_result r,
|
||||
void nft_fib_store_result(void *reg, const struct nft_fib *priv,
|
||||
const struct nft_pktinfo *pkt, int index);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user