[DRBD-cvs] DRBD CVS: drbd by phil from

drbd-cvs@linbit.com drbd-cvs@linbit.com
Mon, 12 Jan 2004 16:03:08 +0100 (CET)


DRBD CVS committal

Author  : phil
Host    : 
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_actlog.c drbd_receiver.c 


Log Message:
[Two patches by Lars]
* A very important fix to drbd_al_begin_io() [Heck. This would have been
  a very hard to find bug.]
* Removed the BKL

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.46
retrieving revision 1.1.2.47
diff -u -3 -r1.1.2.46 -r1.1.2.47
--- drbd_actlog.c	12 Jan 2004 14:33:31 -0000	1.1.2.46
+++ drbd_actlog.c	12 Jan 2004 15:03:08 -0000	1.1.2.47
@@ -68,6 +68,10 @@
 	}
 	al_ext   = lc_get(mdev->act_log,enr);
 	al_flags = mdev->act_log->flags;
+	if (al_ext->lc_number != enr) {
+		if (!lc_try_lock(mdev->resync))
+			BUG(); // has to be successfull, we have the spinlock!
+	}
 	spin_unlock_irq(&mdev->al_lock);
 
 	if (!al_ext) {
@@ -103,6 +107,7 @@
 		spin_lock_irq(&mdev->al_lock);
 		lc_changed(mdev->act_log,al_ext);
 		spin_unlock_irq(&mdev->al_lock);
+		lc_unlock(mdev->resync);
 		wake_up(&mdev->al_wait);
 	}
 }
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.74
retrieving revision 1.97.2.75
diff -u -3 -r1.97.2.74 -r1.97.2.75
--- drbd_receiver.c	8 Jan 2004 15:59:15 -0000	1.97.2.74
+++ drbd_receiver.c	12 Jan 2004 15:03:08 -0000	1.97.2.75
@@ -494,8 +494,6 @@
 	struct socket *newsock;
 	int err = 0;
 
-	//lock_kernel(); tcp stack has per socket locks now
-
 	err = sock->ops->listen(sock, 5);
 	if (err)
 		goto out;
@@ -510,13 +508,11 @@
 	if (err < 0)
 		goto out_release;
 
-	// unlock_kernel();
 	return newsock;
 
       out_release:
 	sock_release(newsock);
       out:
-	unlock_kernel();
 	if(err != -EAGAIN && err != -EINTR)
 		ERR("accept failed! %d\n", err);
 	return 0;
@@ -541,7 +537,6 @@
 	msg.msg_namelen = 0;
 	msg.msg_flags = MSG_WAITALL | MSG_NOSIGNAL;
 
-	// lock_kernel(); // SMP only. Do we need still need this ?
 	oldfs = get_fs();
 	set_fs(KERNEL_DS);
 
@@ -607,7 +602,6 @@
 	};
 
 	set_fs(oldfs);
-	// unlock_kernel();
 
 	return rv;
 }
@@ -626,11 +620,9 @@
 	sock->sk->rcvtimeo =
 	sock->sk->sndtimeo =  mdev->conf.try_connect_int*HZ;
 
-	//lock_kernel(); no No NO! connect may sleep!
 	err = sock->ops->connect(sock,
 				 (struct sockaddr *) mdev->conf.other_addr,
 				 mdev->conf.other_addr_len, 0);
-	//unlock_kernel();
 
 	if (err) {
 		sock_release(sock);
@@ -654,11 +646,9 @@
 	sock2->sk->rcvtimeo =
 	sock2->sk->sndtimeo =  mdev->conf.try_connect_int*HZ;
 
-	//lock_kernel(); tcp stack has per socket locks now
 	err = sock2->ops->bind(sock2,
 			      (struct sockaddr *) mdev->conf.my_addr,
 			      mdev->conf.my_addr_len);
-	//unlock_kernel();
 	if (err) {
 		ERR("Unable to bind (%d)\n", err);
 		sock_release(sock2);