Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -227,6 +227,7 @@ typedef struct ax25_dev {
|
||||
#if defined(CONFIG_AX25_DAMA_SLAVE) || defined(CONFIG_AX25_DAMA_MASTER)
|
||||
ax25_dama_info dama;
|
||||
#endif
|
||||
refcount_t refcount;
|
||||
} ax25_dev;
|
||||
|
||||
typedef struct ax25_cb {
|
||||
@@ -281,6 +282,17 @@ static __inline__ void ax25_cb_put(ax25_cb *ax25)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void ax25_dev_hold(ax25_dev *ax25_dev)
|
||||
{
|
||||
refcount_inc(&ax25_dev->refcount);
|
||||
}
|
||||
|
||||
static inline void ax25_dev_put(ax25_dev *ax25_dev)
|
||||
{
|
||||
if (refcount_dec_and_test(&ax25_dev->refcount)) {
|
||||
kfree(ax25_dev);
|
||||
}
|
||||
}
|
||||
static inline __be16 ax25_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
skb->dev = dev;
|
||||
|
||||
@@ -350,7 +350,8 @@ static inline struct neighbour *neigh_create(struct neigh_table *tbl,
|
||||
return __neigh_create(tbl, pkey, dev, true);
|
||||
}
|
||||
void neigh_destroy(struct neighbour *neigh);
|
||||
int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb);
|
||||
int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb,
|
||||
const bool immediate_ok);
|
||||
int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new, u32 flags,
|
||||
u32 nlmsg_pid);
|
||||
void __neigh_set_probe_once(struct neighbour *neigh);
|
||||
@@ -460,17 +461,24 @@ static inline struct neighbour * neigh_clone(struct neighbour *neigh)
|
||||
|
||||
#define neigh_hold(n) refcount_inc(&(n)->refcnt)
|
||||
|
||||
static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
|
||||
static __always_inline int neigh_event_send_probe(struct neighbour *neigh,
|
||||
struct sk_buff *skb,
|
||||
const bool immediate_ok)
|
||||
{
|
||||
unsigned long now = jiffies;
|
||||
|
||||
|
||||
if (READ_ONCE(neigh->used) != now)
|
||||
WRITE_ONCE(neigh->used, now);
|
||||
if (!(neigh->nud_state&(NUD_CONNECTED|NUD_DELAY|NUD_PROBE)))
|
||||
return __neigh_event_send(neigh, skb);
|
||||
if (!(neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE)))
|
||||
return __neigh_event_send(neigh, skb, immediate_ok);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
|
||||
{
|
||||
return neigh_event_send_probe(neigh, skb, true);
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
static inline int neigh_hh_bridge(struct hh_cache *hh, struct sk_buff *skb)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user