[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