DORMANTno replies

[PATCH][5 of 7][ATM]: avoid race between svc_disconnect and sigd exiting

From: chas williams - CONTRACTOR <hidden>
Date: 2005-01-18 19:09:20

please apply to 2.6.

thanks!

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/01/14 08:47:48-05:00 chas@relax.cmf.nrl.navy.mil 
#   [ATM]: avoid race between svc_disconnect and sigd exiting
#
#   Signed-off-by: Chas Williams [off-list ref]
# 
# net/atm/svc.c
#   2005/01/14 08:47:31-05:00 chas@relax.cmf.nrl.navy.mil +4 -7
#   [ATM]: avoid race between svc_disconnect and sigd exiting
#
#   Signed-off-by: Chas Williams [off-list ref]
# 
diff -Nru a/net/atm/svc.c b/net/atm/svc.c
--- a/net/atm/svc.c	2005-01-14 08:49:39 -05:00
+++ b/net/atm/svc.c	2005-01-14 08:49:39 -05:00
@@ -71,9 +71,7 @@
 		sigd_enq2(NULL,as_reject,vcc,NULL,NULL,&vcc->qos,0);
 		dev_kfree_skb(skb);
 	}
-	clear_bit(ATM_VF_REGIS,&vcc->flags);
-	clear_bit(ATM_VF_RELEASED,&vcc->flags);
-	clear_bit(ATM_VF_CLOSE,&vcc->flags);
+	clear_bit(ATM_VF_REGIS, &vcc->flags);
 	/* ... may retry later */
 }
 
@@ -90,10 +88,8 @@
 		/* VCC pointer is used as a reference, so we must not free it
 		   (thereby subjecting it to re-use) before all pending connections
 	           are closed */
-		sock_hold(sk);
-		vcc_release(sock);
 		svc_disconnect(vcc);
-		sock_put(sk);
+		vcc_release(sock);
 	}
 	return 0;
 }
@@ -286,7 +282,8 @@
  */
 	if (!(error = vcc_connect(sock, vcc->itf, vcc->vpi, vcc->vci)))
 		sock->state = SS_CONNECTED;
-	else (void) svc_disconnect(vcc);
+	else
+		(void) svc_disconnect(vcc);
 out:
 	release_sock(sk);
 	return error;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help