===== net/ipv4/devinet.c 1.34 vs 1.38 ===== --- 1.34/net/ipv4/devinet.c 2004-08-14 08:36:53 +10:00 +++ 1.38/net/ipv4/devinet.c 2004-08-14 14:50:31 +10:00 @@ -104,18 +104,17 @@ return ifa; } -static inline void inet_free_ifa(struct in_ifaddr *ifa) +static void inet_rcu_free_ifa(struct rcu_head *head) { + struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head); if (ifa->ifa_dev) in_dev_put(ifa->ifa_dev); kfree(ifa); } -static void inet_rcu_free_ifa(struct rcu_head *head) +static inline void inet_free_ifa(struct in_ifaddr *ifa) { - struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head); - - inet_free_ifa(ifa); + call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); } void in_dev_finish_destroy(struct in_device *idev) @@ -195,7 +194,7 @@ while ((ifa = in_dev->ifa_list) != NULL) { inet_del_ifa(in_dev, &in_dev->ifa_list, 0); - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa); } #ifdef CONFIG_SYSCTL @@ -255,7 +253,7 @@ rtmsg_ifa(RTM_DELADDR, ifa); notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa); - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa); } } @@ -278,7 +276,7 @@ rtmsg_ifa(RTM_DELADDR, ifa1); notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1); if (destroy) { - call_rcu(&ifa1->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa1); if (!in_dev->ifa_list) inetdev_destroy(in_dev); @@ -293,7 +291,7 @@ ASSERT_RTNL(); if (!ifa->ifa_local) { - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa); return 0; } @@ -308,11 +306,11 @@ if (ifa1->ifa_mask == ifa->ifa_mask && inet_ifa_match(ifa1->ifa_address, ifa)) { if (ifa1->ifa_local == ifa->ifa_local) { - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa); return -EEXIST; } if (ifa1->ifa_scope != ifa->ifa_scope) { - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa); return -EINVAL; } ifa->ifa_flags |= IFA_F_SECONDARY; @@ -347,7 +345,7 @@ if (!in_dev) { in_dev = inetdev_init(dev); if (!in_dev) { - call_rcu(&ifa->rcu_head, inet_rcu_free_ifa); + inet_free_ifa(ifa); return -ENOBUFS; } }