[DRBD-cvs] r1563 - trunk/drbd

svn at svn.drbd.org svn at svn.drbd.org
Sun Sep 26 19:50:56 CEST 2004


Author: lars
Date: 2004-09-26 19:50:53 +0200 (Sun, 26 Sep 2004)
New Revision: 1563

Modified:
   trunk/drbd/drbd_int.h
   trunk/drbd/drbd_main.c
Log:
add missing set_fs(KERNEL_DS); to _drbd_send_page
move to kvec and kernel_...msg() for 2.6.8

Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h	2004-09-26 17:50:20 UTC (rev 1562)
+++ trunk/drbd/drbd_int.h	2004-09-26 17:50:53 UTC (rev 1563)
@@ -199,6 +199,13 @@
 # define MUST_HOLD(lock)
 #endif
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,8)
+# define HAVE_KERNEL_SENDMSG 1
+#else
+# define HAVE_KERNEL_SENDMSG 0
+#endif
+
+
 /*
  * our structs
  *************************/

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2004-09-26 17:50:20 UTC (rev 1562)
+++ trunk/drbd/drbd_main.c	2004-09-26 17:50:53 UTC (rev 1563)
@@ -855,6 +855,7 @@
 int _drbd_send_page(drbd_dev *mdev, struct page *page,
 		    int offset, size_t size)
 {
+	mm_segment_t oldfs = get_fs();
 	int sent,ok;
 	int len   = size;
 
@@ -898,6 +899,7 @@
 		goto out;
 	}
 
+	set_fs(KERNEL_DS);
 	do {
 		sent = mdev->data.socket->ops->sendpage(mdev->data.socket,page,
 							offset,len,
@@ -918,6 +920,7 @@
 		offset += sent;
 		// FIXME test "last_received" ...
 	} while(len > 0 /* THINK && mdev->cstate >= Connected*/);
+	set_fs(oldfs);
 
   out:
 	spin_lock(&mdev->send_task_lock);
@@ -1064,9 +1067,13 @@
 int drbd_send(drbd_dev *mdev, struct socket *sock,
 	      void* buf, size_t size, unsigned msg_flags)
 {
+#if !HAVE_KERNEL_SENDMSG
 	mm_segment_t oldfs;
+	struct iovec iov;
+#else
+	struct kvec iov;
+#endif
 	struct msghdr msg;
-	struct iovec iov;
 	int rv,sent=0;
 
 	if (!sock) return -1000;
@@ -1079,14 +1086,18 @@
 
 	msg.msg_name       = 0;
 	msg.msg_namelen    = 0;
+#if !HAVE_KERNEL_SENDMSG
 	msg.msg_iov        = &iov;
 	msg.msg_iovlen     = 1;
+#endif
 	msg.msg_control    = NULL;
 	msg.msg_controllen = 0;
 	msg.msg_flags      = msg_flags | MSG_NOSIGNAL;
 
+#if !HAVE_KERNEL_SENDMSG
 	oldfs = get_fs();
 	set_fs(KERNEL_DS);
+#endif
 
 	if (sock == mdev->data.socket)
 		mdev->ko_count = mdev->conf.ko_count;
@@ -1100,7 +1111,11 @@
  * do we need to block DRBD_SIG if sock == &meta.socket ??
  * otherwise wake_asender() might interrupt some send_*Ack !
  */
+#if !HAVE_KERNEL_SENDMSG
 		rv = sock_sendmsg(sock, &msg, iov.iov_len );
+#else
+		rv = kernel_sendmsg(sock, &msg, &iov, 1, size);
+#endif
 		if (rv == -EAGAIN) {
 			if (we_should_drop_the_connection(mdev,sock))
 				break;
@@ -1129,7 +1144,9 @@
 		iov.iov_len  -= rv;
 	} while(sent < size);
 
+#if !HAVE_KERNEL_SENDMSG
 	set_fs(oldfs);
+#endif
 
 	if (rv <= 0) {
 		if (rv != -EAGAIN) {



More information about the drbd-cvs mailing list