]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/ipvs/ip_vs_ctl.c
ipvs: only unlock in ip_vs_edit_service() if already locked
[~andy/linux] / net / ipv4 / ipvs / ip_vs_ctl.c
index 993a83fb0d56f689beab53e4f158b448f0f87690..60ca24b9ec00ca69c5ade801e085c41fcd660187 100644 (file)
@@ -1305,7 +1305,7 @@ ip_vs_edit_service(struct ip_vs_service *svc, struct ip_vs_service_user_kern *u)
                 */
                if ((ret = ip_vs_unbind_scheduler(svc))) {
                        old_sched = sched;
-                       goto out;
+                       goto out_unlock;
                }
 
                /*
@@ -1324,12 +1324,13 @@ ip_vs_edit_service(struct ip_vs_service *svc, struct ip_vs_service_user_kern *u)
                         */
                        ip_vs_bind_scheduler(svc, old_sched);
                        old_sched = sched;
-                       goto out;
+                       goto out_unlock;
                }
        }
 
-  out:
+  out_unlock:
        write_unlock_bh(&__ip_vs_svc_lock);
+  out:
 
        if (old_sched)
                ip_vs_scheduler_put(old_sched);