Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / net / netfilter / ipvs / ip_vs_xmit.c
index 3db7889edefc7ae193a0cd5c70a204345a2e9a74..b75ff6429a04e25d4ba8e6368173ab84a342751c 100644 (file)
@@ -177,22 +177,22 @@ __ip_vs_get_out_rt(struct sk_buff *skb, struct ip_vs_dest *dest,
                        rt = (struct rtable *) dest_dst->dst_cache;
                else {
                        dest_dst = ip_vs_dest_dst_alloc();
-                       spin_lock(&dest->dst_lock);
+                       spin_lock_bh(&dest->dst_lock);
                        if (!dest_dst) {
                                __ip_vs_dst_set(dest, NULL, NULL, 0);
-                               spin_unlock(&dest->dst_lock);
+                               spin_unlock_bh(&dest->dst_lock);
                                goto err_unreach;
                        }
                        rt = do_output_route4(net, dest->addr.ip, rt_mode,
                                              &dest_dst->dst_saddr.ip);
                        if (!rt) {
                                __ip_vs_dst_set(dest, NULL, NULL, 0);
-                               spin_unlock(&dest->dst_lock);
+                               spin_unlock_bh(&dest->dst_lock);
                                ip_vs_dest_dst_free(dest_dst);
                                goto err_unreach;
                        }
                        __ip_vs_dst_set(dest, dest_dst, &rt->dst, 0);
-                       spin_unlock(&dest->dst_lock);
+                       spin_unlock_bh(&dest->dst_lock);
                        IP_VS_DBG(10, "new dst %pI4, src %pI4, refcnt=%d\n",
                                  &dest->addr.ip, &dest_dst->dst_saddr.ip,
                                  atomic_read(&rt->dst.__refcnt));
@@ -358,10 +358,10 @@ __ip_vs_get_out_rt_v6(struct sk_buff *skb, struct ip_vs_dest *dest,
                        u32 cookie;
 
                        dest_dst = ip_vs_dest_dst_alloc();
-                       spin_lock(&dest->dst_lock);
+                       spin_lock_bh(&dest->dst_lock);
                        if (!dest_dst) {
                                __ip_vs_dst_set(dest, NULL, NULL, 0);
-                               spin_unlock(&dest->dst_lock);
+                               spin_unlock_bh(&dest->dst_lock);
                                goto err_unreach;
                        }
                        dst = __ip_vs_route_output_v6(net, &dest->addr.in6,
@@ -369,14 +369,14 @@ __ip_vs_get_out_rt_v6(struct sk_buff *skb, struct ip_vs_dest *dest,
                                                      do_xfrm);
                        if (!dst) {
                                __ip_vs_dst_set(dest, NULL, NULL, 0);
-                               spin_unlock(&dest->dst_lock);
+                               spin_unlock_bh(&dest->dst_lock);
                                ip_vs_dest_dst_free(dest_dst);
                                goto err_unreach;
                        }
                        rt = (struct rt6_info *) dst;
                        cookie = rt->rt6i_node ? rt->rt6i_node->fn_sernum : 0;
                        __ip_vs_dst_set(dest, dest_dst, &rt->dst, cookie);
-                       spin_unlock(&dest->dst_lock);
+                       spin_unlock_bh(&dest->dst_lock);
                        IP_VS_DBG(10, "new dst %pI6, src %pI6, refcnt=%d\n",
                                  &dest->addr.in6, &dest_dst->dst_saddr.in6,
                                  atomic_read(&rt->dst.__refcnt));