[DRBD-cvs] r1562 - branches/drbd-0.7/drbd

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


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

Modified:
   branches/drbd-0.7/drbd/drbd_compat_wrappers.h
   branches/drbd-0.7/drbd/drbd_int.h
   branches/drbd-0.7/drbd/drbd_main.c
Log:
use bh_kmap in _drbd_send_bio for kernel 2.4.x
add missing set_fs(KERNEL_DS); to _drbd_send_page
move to kvec and kernel_...msg() for 2.6.8

Modified: branches/drbd-0.7/drbd/drbd_compat_wrappers.h
===================================================================
--- branches/drbd-0.7/drbd/drbd_compat_wrappers.h	2004-09-24 11:43:17 UTC (rev 1561)
+++ branches/drbd-0.7/drbd/drbd_compat_wrappers.h	2004-09-26 17:50:20 UTC (rev 1562)
@@ -314,18 +314,11 @@
  */
 static inline int _drbd_send_bio(drbd_dev *mdev, struct buffer_head *bh)
 {
-	struct page *page = bh->b_page;
 	size_t size = bh->b_size;
-	int offset;
 	int ret;
 
-	if (PageHighMem(page))
-		offset = (int)(long)bh->b_data;
-	else
-		offset = (long)bh->b_data - (long)page_address(page);
-
-	ret = drbd_send(mdev, mdev->data.socket, kmap(page) + offset, size, 0);
-	kunmap(page);
+	ret = drbd_send(mdev, mdev->data.socket, bh_kmap(bh), size, 0);
+	bh_kunmap(bh);
 	return ret;
 }
 

Modified: branches/drbd-0.7/drbd/drbd_int.h
===================================================================
--- branches/drbd-0.7/drbd/drbd_int.h	2004-09-24 11:43:17 UTC (rev 1561)
+++ branches/drbd-0.7/drbd/drbd_int.h	2004-09-26 17:50:20 UTC (rev 1562)
@@ -35,6 +35,12 @@
 #include <linux/slab.h> 
 #include "lru_cache.h"
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,8)
+# define HAVE_KERNEL_SENDMSG 1
+#else
+# define HAVE_KERNEL_SENDMSG 0
+#endif
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 #include "mempool.h"
 #endif

Modified: branches/drbd-0.7/drbd/drbd_main.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_main.c	2004-09-24 11:43:17 UTC (rev 1561)
+++ branches/drbd-0.7/drbd/drbd_main.c	2004-09-26 17:50:20 UTC (rev 1562)
@@ -930,6 +930,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;
 
@@ -973,6 +974,7 @@
 		goto out;
 	}
 
+	set_fs(KERNEL_DS);
 	do {
 		sent = mdev->data.socket->ops->sendpage(mdev->data.socket,page,
 							offset,len,
@@ -993,6 +995,7 @@
 		offset += sent;
 		// FIXME test "last_received" ...
 	} while(len > 0 /* THINK && mdev->cstate >= Connected*/);
+	set_fs(oldfs);
 
   out:
 	spin_lock(&mdev->send_task_lock);
@@ -1139,9 +1142,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;
@@ -1154,14 +1161,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;
@@ -1175,7 +1186,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;
@@ -1204,7 +1219,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