diff options
Diffstat (limited to 'include/net/ax25.h')
| -rw-r--r-- | include/net/ax25.h | 24 | 
1 files changed, 15 insertions, 9 deletions
| diff --git a/include/net/ax25.h b/include/net/ax25.h index 7cd528e9d668..69374cd1a857 100644 --- a/include/net/ax25.h +++ b/include/net/ax25.h @@ -182,14 +182,26 @@ typedef struct {  typedef struct ax25_route {  	struct ax25_route	*next; -	atomic_t		ref; +	atomic_t		refcount;  	ax25_address		callsign;  	struct net_device	*dev;  	ax25_digi		*digipeat;  	char			ip_mode; -	struct timer_list	timer;  } ax25_route; +static inline void ax25_hold_route(ax25_route *ax25_rt) +{ +	atomic_inc(&ax25_rt->refcount); +} + +extern void __ax25_put_route(ax25_route *ax25_rt); + +static inline void ax25_put_route(ax25_route *ax25_rt) +{ +	if (atomic_dec_and_test(&ax25_rt->refcount)) +		__ax25_put_route(ax25_rt); +} +  typedef struct {  	char			slave;			/* slave_mode?   */  	struct timer_list	slave_timer;		/* timeout timer */ @@ -348,17 +360,11 @@ extern int  ax25_check_iframes_acked(ax25_cb *, unsigned short);  extern void ax25_rt_device_down(struct net_device *);  extern int  ax25_rt_ioctl(unsigned int, void __user *);  extern struct file_operations ax25_route_fops; +extern ax25_route *ax25_get_route(ax25_address *addr, struct net_device *dev);  extern int  ax25_rt_autobind(ax25_cb *, ax25_address *); -extern ax25_route *ax25_rt_find_route(ax25_route *, ax25_address *, -	struct net_device *);  extern struct sk_buff *ax25_rt_build_path(struct sk_buff *, ax25_address *, ax25_address *, ax25_digi *);  extern void ax25_rt_free(void); -static inline void ax25_put_route(ax25_route *ax25_rt) -{ -	atomic_dec(&ax25_rt->ref); -} -  /* ax25_std_in.c */  extern int  ax25_std_frame_in(ax25_cb *, struct sk_buff *, int); | 
