From c8cc18bc7ab8ed9f43be2796aeb56380cfc20050 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Wed, 23 Apr 2008 22:10:48 -0700 Subject: [PATCH] --- yaml --- r: 92006 b: refs/heads/master c: c9c1014b2bd014c7ec037bbb6f58818162fdb265 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/rtnetlink.h | 4 ++-- trunk/net/core/rtnetlink.c | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 7c463b90c2a3..5730fb222f8b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6440be177f56e0b52dd81df82b78875d9a07d5f9 +refs/heads/master: c9c1014b2bd014c7ec037bbb6f58818162fdb265 diff --git a/trunk/include/linux/rtnetlink.h b/trunk/include/linux/rtnetlink.h index b9e174079002..44c81c744538 100644 --- a/trunk/include/linux/rtnetlink.h +++ b/trunk/include/linux/rtnetlink.h @@ -740,13 +740,13 @@ extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change); extern void rtnl_lock(void); extern void rtnl_unlock(void); extern int rtnl_trylock(void); +extern int rtnl_is_locked(void); extern void rtnetlink_init(void); extern void __rtnl_unlock(void); #define ASSERT_RTNL() do { \ - if (unlikely(rtnl_trylock())) { \ - rtnl_unlock(); \ + if (unlikely(!rtnl_is_locked())) { \ printk(KERN_ERR "RTNL: assertion failed at %s (%d)\n", \ __FILE__, __LINE__); \ dump_stack(); \ diff --git a/trunk/net/core/rtnetlink.c b/trunk/net/core/rtnetlink.c index bc39e417694a..cf857c4dc7b1 100644 --- a/trunk/net/core/rtnetlink.c +++ b/trunk/net/core/rtnetlink.c @@ -82,6 +82,11 @@ int rtnl_trylock(void) return mutex_trylock(&rtnl_mutex); } +int rtnl_is_locked(void) +{ + return mutex_is_locked(&rtnl_mutex); +} + static struct rtnl_link *rtnl_msg_handlers[NPROTO]; static inline int rtm_msgindex(int msgtype) @@ -1402,6 +1407,7 @@ EXPORT_SYMBOL(rtnetlink_put_metrics); EXPORT_SYMBOL(rtnl_lock); EXPORT_SYMBOL(rtnl_trylock); EXPORT_SYMBOL(rtnl_unlock); +EXPORT_SYMBOL(rtnl_is_locked); EXPORT_SYMBOL(rtnl_unicast); EXPORT_SYMBOL(rtnl_notify); EXPORT_SYMBOL(rtnl_set_sk_err);