aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/inetdevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/inetdevice.h')
-rw-r--r--include/linux/inetdevice.h14
1 files changed, 5 insertions, 9 deletions
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index 2be1a1a2beb9..1ec09bb4a3ab 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -9,6 +9,7 @@
9#include <linux/rcupdate.h> 9#include <linux/rcupdate.h>
10#include <linux/timer.h> 10#include <linux/timer.h>
11#include <linux/sysctl.h> 11#include <linux/sysctl.h>
12#include <linux/rtnetlink.h>
12 13
13enum 14enum
14{ 15{
@@ -198,14 +199,10 @@ static __inline__ int bad_mask(__be32 mask, __be32 addr)
198 199
199static inline struct in_device *__in_dev_get_rcu(const struct net_device *dev) 200static inline struct in_device *__in_dev_get_rcu(const struct net_device *dev)
200{ 201{
201 struct in_device *in_dev = dev->ip_ptr; 202 return rcu_dereference(dev->ip_ptr);
202 if (in_dev)
203 in_dev = rcu_dereference(in_dev);
204 return in_dev;
205} 203}
206 204
207static __inline__ struct in_device * 205static inline struct in_device *in_dev_get(const struct net_device *dev)
208in_dev_get(const struct net_device *dev)
209{ 206{
210 struct in_device *in_dev; 207 struct in_device *in_dev;
211 208
@@ -217,10 +214,9 @@ in_dev_get(const struct net_device *dev)
217 return in_dev; 214 return in_dev;
218} 215}
219 216
220static __inline__ struct in_device * 217static inline struct in_device *__in_dev_get_rtnl(const struct net_device *dev)
221__in_dev_get_rtnl(const struct net_device *dev)
222{ 218{
223 return (struct in_device*)dev->ip_ptr; 219 return rcu_dereference_check(dev->ip_ptr, lockdep_rtnl_is_held());
224} 220}
225 221
226extern void in_dev_finish_destroy(struct in_device *idev); 222extern void in_dev_finish_destroy(struct in_device *idev);