diff options
author | Ying Xue <ying.xue@windriver.com> | 2018-02-14 00:37:59 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-02-14 14:46:32 -0500 |
commit | d59d8b77abf4308e9c6809298341e275eac38404 (patch) | |
tree | e3b367d235995cabbad494a573ef2889ae08c6e5 | |
parent | e5d1a1eec0f4b51d0a7a6457d0b1b99b34f3e901 (diff) |
tipc: Introduce __tipc_nl_bearer_disable
Introduce __tipc_nl_bearer_disable() which doesn't hold RTNL lock.
Signed-off-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/tipc/bearer.c | 19 | ||||
-rw-r--r-- | net/tipc/bearer.h | 1 |
2 files changed, 14 insertions, 6 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index c8001471da6c..61b6625f93a4 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
@@ -813,7 +813,7 @@ err_out: | |||
813 | return err; | 813 | return err; |
814 | } | 814 | } |
815 | 815 | ||
816 | int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info) | 816 | int __tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info) |
817 | { | 817 | { |
818 | int err; | 818 | int err; |
819 | char *name; | 819 | char *name; |
@@ -835,19 +835,26 @@ int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info) | |||
835 | 835 | ||
836 | name = nla_data(attrs[TIPC_NLA_BEARER_NAME]); | 836 | name = nla_data(attrs[TIPC_NLA_BEARER_NAME]); |
837 | 837 | ||
838 | rtnl_lock(); | ||
839 | bearer = tipc_bearer_find(net, name); | 838 | bearer = tipc_bearer_find(net, name); |
840 | if (!bearer) { | 839 | if (!bearer) |
841 | rtnl_unlock(); | ||
842 | return -EINVAL; | 840 | return -EINVAL; |
843 | } | ||
844 | 841 | ||
845 | bearer_disable(net, bearer); | 842 | bearer_disable(net, bearer); |
846 | rtnl_unlock(); | ||
847 | 843 | ||
848 | return 0; | 844 | return 0; |
849 | } | 845 | } |
850 | 846 | ||
847 | int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info) | ||
848 | { | ||
849 | int err; | ||
850 | |||
851 | rtnl_lock(); | ||
852 | err = __tipc_nl_bearer_disable(skb, info); | ||
853 | rtnl_unlock(); | ||
854 | |||
855 | return err; | ||
856 | } | ||
857 | |||
851 | int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info) | 858 | int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info) |
852 | { | 859 | { |
853 | int err; | 860 | int err; |
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h index 42d6eeeb646d..bcc6d5f7014b 100644 --- a/net/tipc/bearer.h +++ b/net/tipc/bearer.h | |||
@@ -188,6 +188,7 @@ extern struct tipc_media udp_media_info; | |||
188 | #endif | 188 | #endif |
189 | 189 | ||
190 | int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info); | 190 | int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info); |
191 | int __tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info); | ||
191 | int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info); | 192 | int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info); |
192 | int tipc_nl_bearer_dump(struct sk_buff *skb, struct netlink_callback *cb); | 193 | int tipc_nl_bearer_dump(struct sk_buff *skb, struct netlink_callback *cb); |
193 | int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info); | 194 | int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info); |