[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