[DRBD-cvs] drbd by phil; Merged Lars' 03-bio.diff. Will review it...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Sat, 24 Jan 2004 19:28:32 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	Makefile drbd_compat_types.h drbd_compat_wrappers.h 
	drbd_dsender.c drbd_fs.c drbd_int.h drbd_main.c 
	drbd_receiver.c drbd_req-2.4.c 


Log Message:
Merged Lars' 03-bio.diff. Will review it tomorrow morning. -- Current 
state is: just merged.

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Makefile,v
retrieving revision 1.14.2.17
retrieving revision 1.14.2.18
diff -u -3 -r1.14.2.17 -r1.14.2.18
--- Makefile	11 Jan 2004 14:33:03 -0000	1.14.2.17
+++ Makefile	24 Jan 2004 18:28:26 -0000	1.14.2.18
@@ -38,13 +38,13 @@
   # linux 2.6 style:
   obj-m     += drbd.o
   drbd-objs := drbd_fs.o drbd_main.o drbd_proc.o drbd_dsender.o \
-               drbd_receiver.o drbd_req-2.4.o mempool-2.4.o drbd_actlog.o \
+               drbd_receiver.o drbd_req-2.4.o drbd_actlog.o \
 	       lru_cache.o
 
   # rest is magic for KERNEL_VERSION < 2.6
   ifneq ($(findstring $(PATCHLEVEL),24),)
     # linux 2.2//2.4 style needs in addition:
-
+    drbd-objs  += mempool-2.4.o 
     list-multi := drbd.o
 
     ifeq ($(PATCHLEVEL),2)
@@ -135,6 +135,6 @@
   endif
 
   depmod:
-	[ -e $(LINUX)/System.map ] && \
-	   /sbin/depmod -F $(LINUX)/System.map -e ./drbd.o 2>&1 >/dev/null || true
+	[ -e $(KDIR)/System.map ] && [ -e ./drbd.o ] && \
+	   /sbin/depmod -F $(KDIR)/System.map -e ./drbd.o 2>&1 >/dev/null
 endif
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_compat_types.h,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -3 -r1.1.2.2 -r1.1.2.3
--- drbd_compat_types.h	21 Jan 2004 19:07:38 -0000	1.1.2.2
+++ drbd_compat_types.h	24 Jan 2004 18:28:26 -0000	1.1.2.3
@@ -16,12 +16,6 @@
 #define bh_kunmap(bh)	do { } while (0)
 #endif
 
-#if defined(DBG_SPINLOCKS) && defined(__SMP__)
-# define MUST_HOLD(lock) if(!spin_is_locked(lock)) { ERR("Not holding lock! in %s\n", __FUNCTION__ ); }
-#else
-# define MUST_HOLD(lock)
-#endif
-
 #ifndef list_for_each
 #define list_for_each(pos, head) \
 	for(pos = (head)->next; pos != (head); pos = pos->next)
@@ -52,9 +46,9 @@
 #else // LINUX 2.6
 # warning "FIXME"
 
-#define SIGHAND_HACK
-
 typedef struct bio drbd_bio_t;
+
+#define SIGHAND_HACK
 
 #define NOT_IN_26(x...)
 #define ONLY_IN_26(x...)	x
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_compat_wrappers.h,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -3 -r1.1.2.3 -r1.1.2.4
--- drbd_compat_wrappers.h	24 Jan 2004 17:59:10 -0000	1.1.2.3
+++ drbd_compat_wrappers.h	24 Jan 2004 18:28:26 -0000	1.1.2.4
@@ -74,6 +74,8 @@
 	return fsync_dev(MKDEV(MAJOR_NR, (int)(mdev-drbd_conf)));
 }
 
+#define drbd_bio_uptodate(bio) buffer_uptodate(bio)
+
 static inline void drbd_bio_IO_error(struct buffer_head *bh)
 {
 	buffer_IO_error(bh);
@@ -308,6 +310,8 @@
 #else
 # warning "FIXME these do nonsense. Currently I only check whether it compiles!"
 
+#include <linux/buffer_head.h> // for fsync_bdev
+
 extern void FIXME_DONT_USE(void); // unresolved symbol ;)
 
 /* see get_sb_bdev and bd_claim */
@@ -321,7 +325,6 @@
 extern int drbd_dio_end_sec        (struct bio *bio, unsigned int ignored, int error);
 extern int drbd_dio_end            (struct bio *bio, unsigned int ignored, int error);
 
-
 #ifdef DBG_BH_SECTOR
 static inline sector_t APP_BH_SECTOR(struct bio *bio)
 {
@@ -357,8 +360,10 @@
 
 static inline int drbd_sync_me(drbd_dev *mdev)
 {
-	return 0; // fsync_bdev(mdev->this_device);
+	return fsync_bdev(mdev->this_bdev);
 }
+
+#define drbd_bio_uptodate(bio) bio_flagged(bio,BIO_UPTODATE)
 
 static inline void drbd_bio_IO_error(struct bio *bio)
 {
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.60
retrieving revision 1.1.2.61
diff -u -3 -r1.1.2.60 -r1.1.2.61
--- drbd_dsender.c	24 Jan 2004 17:59:10 -0000	1.1.2.60
+++ drbd_dsender.c	24 Jan 2004 18:28:26 -0000	1.1.2.61
@@ -166,7 +166,7 @@
 }
 
 #else
-# error "FIXME"
+# warning "FIXME"
 #endif
 
 int w_resync_inactive(drbd_dev *mdev, struct drbd_work *w)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.49
retrieving revision 1.28.2.50
diff -u -3 -r1.28.2.49 -r1.28.2.50
--- drbd_fs.c	21 Jan 2004 19:07:38 -0000	1.28.2.49
+++ drbd_fs.c	24 Jan 2004 18:28:26 -0000	1.28.2.50
@@ -152,6 +152,12 @@
 
 	minor=(int)(mdev-drbd_conf);
 
+	/* if you want to reconfigure, please tear down first */
+ONLY_IN_26(
+	if (mdev->backing_bdev)
+		return -EBUSY;
+)
+
 	if (mdev->open_cnt > 1)
 		return -EBUSY;
 
@@ -177,7 +183,7 @@
 		retcode=LDMounted;
 		goto fail_ioctl;
 	}
-#warning "FIXME sync ll-dev, check size"
+#warning "FIXME check size"
 #warning "FIXME meta-device"
 	mdev->backing_bdev = bdev;
 #else
@@ -298,7 +304,9 @@
 {
 	struct ioctl_get_config cn;
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 #warning "FIXME make 26 clean, maybe move to compat layer?"
+#else
 	cn.cstate=mdev->cstate;
 	cn.lower_device_major=MAJOR(mdev->lo_device);
 	cn.lower_device_minor=MINOR(mdev->lo_device);
@@ -312,6 +320,7 @@
 
 	if (copy_to_user(arg,&cn,sizeof(struct ioctl_get_config)))
 		return -EFAULT;
+#endif
 
 	return 0;
 }
@@ -410,7 +419,7 @@
 
 #warning "FIXME actually must hold device_mutex!"
 
-	int minor = mdev-drbd_conf;
+	NOT_IN_26(int minor = mdev-drbd_conf;)
 	if ( (newstate & 0x3) == mdev->state ) return 0; /* nothing to do */
 
 	// exactly one of sec or pri. not both.
@@ -432,9 +441,6 @@
 		/* If I got here, I am Primary. I claim me for myself. If that
 		 * does not succeed, someone other has claimed me, so I cannot
 		 * become Secondary. */
-#warning "FIXME"
-		/* if something fails beyond this point, we actually need to
-		 * bd_release again */
 		if (bd_claim(mdev->this_bdev,drbd_sec_holder))
 			return -EBUSY;
 	}
@@ -451,13 +457,24 @@
 	/* Wait until nothing is on the fly :) */
 	if ( wait_event_interruptible( mdev->state_wait,
 			atomic_read(&mdev->ap_pending_cnt) == 0 ) ) {
+ONLY_IN_26(
+		if ( newstate & Secondary )
+			D_ASSERT(mdev->this_bdev->bd_holder == drbd_sec_holder);
+			bd_release(mdev->this_bdev);
+)
 		return -EINTR;
 	}
 
 	mdev->state = (Drbd_State) newstate & 0x03;
 	if(newstate & Primary) {
 		NOT_IN_26( set_device_ro(MKDEV(MAJOR_NR, minor), FALSE ); )
-		ONLY_IN_26( set_disk_ro(mdev->vdisk, FALSE ); )
+
+ONLY_IN_26(
+		set_disk_ro(mdev->vdisk, FALSE );
+		D_ASSERT(mdev->this_bdev->bd_holder == drbd_sec_holder);
+		bd_release(mdev->this_bdev);
+)
+
 		if(newstate & Human) {
 			drbd_md_inc(mdev,HumanCnt);
 		} else if(newstate & TimeoutExpired ) {
@@ -556,10 +573,10 @@
 	long time;
 	struct Drbd_Conf *mdev;
 	struct ioctl_wait* wp;
-	ONLY_IN_26(
+ONLY_IN_26(
 	struct block_device *bdev = inode->i_bdev;
 	struct gendisk *disk = bdev->bd_disk;
-	)
+)
 
 	minor = MINOR(inode->i_rdev);
 	if (minor >= minor_count) return -ENODEV;
@@ -573,10 +590,10 @@
 	 * we hold the device_mutex
 	 */
 
-	ONLY_IN_26(
+ONLY_IN_26(
 	D_ASSERT(bdev == mdev->this_bdev);
 	D_ASSERT(disk == mdev->vdisk);
-	);
+);
 
 	switch (cmd) {
 	case BLKGETSIZE:
@@ -625,6 +642,7 @@
 		mdev->lo_usize = (unsigned long)arg;
 		drbd_determin_dev_size(mdev);
 		drbd_md_write(mdev); // Write mdev->la_size to disk.
+#warning "yet an other reason to serialize all state changes on a rw_semaphore"
 		if (mdev->cstate == Connected) drbd_send_param(mdev);
 		break;
 
@@ -644,7 +662,7 @@
 	case DRBD_IOCTL_UNCONFIG_NET:
 		if( mdev->cstate == Unconfigured) break;
 		/* FIXME what if fsync returns error */
-		fsync_dev(MKDEV(MAJOR_NR, minor));
+		drbd_sync_me(mdev);
 		set_bit(DO_NOT_INC_CONCNT,&mdev->flags);
 		drbd_thread_stop(&mdev->worker);
 		drbd_thread_stop(&mdev->asender);
@@ -661,7 +679,7 @@
 			break;
 		}
 
-		fsync_dev(MKDEV(MAJOR_NR, minor));
+		drbd_sync_me(mdev);
 		set_bit(DO_NOT_INC_CONCNT,&mdev->flags);
 		drbd_thread_stop(&mdev->worker);
 		drbd_thread_stop(&mdev->asender);
@@ -762,7 +780,7 @@
 	default:
 		err = -EINVAL;
 	}
- out:
+ //out:
 	up(&mdev->device_mutex);
  out_unlocked:
 	return err;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.103
retrieving revision 1.58.2.104
diff -u -3 -r1.58.2.103 -r1.58.2.104
--- drbd_int.h	24 Jan 2004 17:59:10 -0000	1.58.2.103
+++ drbd_int.h	24 Jan 2004 18:28:26 -0000	1.58.2.104
@@ -30,9 +30,12 @@
 #include <linux/types.h>
 #include <linux/version.h>
 #include <linux/list.h>
-#include "mempool.h"
 #include "lru_cache.h"
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+#include "mempool.h"
+#endif
+
 // module parameter, defined in drbd_main.c
 extern int minor_count;
 extern int disable_io_hints;
@@ -176,6 +179,12 @@
 # define RECALC_SIGPENDING(TSK)     (recalc_sigpending(TSK))
 #endif
 
+#if defined(DBG_SPINLOCKS) && defined(__SMP__)
+# define MUST_HOLD(lock) if(!spin_is_locked(lock)) { ERR("Not holding lock! in %s\n", __FUNCTION__ ); }
+#else
+# define MUST_HOLD(lock)
+#endif
+
 /*
  * our structs
  *************************/
@@ -689,7 +698,7 @@
 	int ee_in_use;
 	wait_queue_head_t ee_wait;
 	struct list_head busy_blocks;
-	NOT_IN_26(struct tq_struct write_hint_tq);
+	NOT_IN_26(struct tq_struct write_hint_tq;)
 	drbd_bio_t md_io_bio; // a (one page) Byte buffer for md_io
 	struct semaphore md_io_mutex; // protects the md_io_buffer
 	spinlock_t al_lock;
@@ -810,7 +819,11 @@
 // drbd_req
 #define ERF_NOTLD    2   /* do not call tl_dependence */
 extern void drbd_end_req(drbd_request_t *, int, int, sector_t);
-extern int drbd_make_request(request_queue_t *,int ,struct buffer_head *);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+extern int drbd_make_request(request_queue_t *q, int rw, struct buffer_head *bio);
+#else
+extern int drbd_make_request(request_queue_t *q, struct bio *bio);
+#endif
 
 // drbd_fs.c
 extern int drbd_determin_dev_size(drbd_dev*);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.104
retrieving revision 1.73.2.105
diff -u -3 -r1.73.2.104 -r1.73.2.105
--- drbd_main.c	21 Jan 2004 19:07:38 -0000	1.73.2.104
+++ drbd_main.c	24 Jan 2004 18:28:26 -0000	1.73.2.105
@@ -111,7 +111,7 @@
 NOT_IN_26(
 STATIC int *drbd_blocksizes;
 STATIC int *drbd_sizes;
-);
+)
 struct Drbd_Conf *drbd_conf;
 kmem_cache_t *drbd_request_cache;
 kmem_cache_t *drbd_pr_cache;
@@ -963,6 +963,8 @@
 	   by one of our threads?
 	 */
 
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 	for (i = 0; i < minor_count; i++) {
 		if(current == drbd_conf[i].receiver.task) {
 			queue_task(&mdev->write_hint_tq, &tq_disk);
@@ -978,6 +980,10 @@
 			clear_bit(WRITE_HINT_QUEUED, &mdev->flags);
 		} else queue_task(&mdev->write_hint_tq, &tq_disk);
 	}
+#else
+# warning "FIXME"
+#endif
+
 }
 
 void drbd_init_set_defaults(drbd_dev *mdev)
@@ -1040,8 +1046,10 @@
 	drbd_thread_init(mdev, &mdev->worker, drbd_worker);
 	drbd_thread_init(mdev, &mdev->asender, drbd_asender);
 
+NOT_IN_26(
 	mdev->write_hint_tq.routine = &drbd_send_write_hint;
 	mdev->write_hint_tq.data    = mdev;
+)
 
 #ifdef __arch_um__
 	INFO("mdev = 0x%p\n",mdev);
@@ -1130,20 +1138,22 @@
 		i=minor_count;
 		while (i--) {
 			drbd_dev        *mdev  = &drbd_conf[i];
-			ONLY_IN_26(
+ONLY_IN_26(
 			struct gendisk  **disk = &mdev->vdisk;
 			request_queue_t **q    = &mdev->rq_queue;
-			)
+)
 
 			drbd_free_resources(mdev);
 
-			ONLY_IN_26(
-			if (*disk)
+ONLY_IN_26(
+			if (*disk) {
+				del_gendisk(*disk);
 				put_disk(*disk);
-			*disk = NULL;
+				*disk = NULL;
+			}
 			if (*q) blk_put_queue(*q);
 			*q = NULL;
-			)
+)
 
 			tl_cleanup(mdev);
 			if (mdev->mbds_id) bm_cleanup(mdev->mbds_id);
@@ -1176,23 +1186,21 @@
 	}
 
 
-	NOT_IN_26(
+NOT_IN_26(
 	blksize_size[MAJOR_NR] = NULL;
 	blk_size[MAJOR_NR]     = NULL;
-	)
 	// kfree(NULL) is noop
-	kfree(drbd_conf);
 	kfree(drbd_blocksizes);
 	kfree(drbd_sizes);
+)
+	kfree(drbd_conf);
 
 	if (unregister_blkdev(MAJOR_NR, DEVICE_NAME) != 0)
 		printk(KERN_ERR DEVICE_NAME": unregister of device failed\n");
 
 }
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-void *
-kcalloc(size_t size, int type)
+void * kcalloc(size_t size, int type)
 {
 	void *addr;
 	addr = kmalloc(size, type);
@@ -1200,15 +1208,17 @@
 		memset(addr, 0, size);
 	return addr;
 }
-#endif
 
 int __init drbd_init(void)
 {
 
 	int i,err;
 
-	if (register_blkdev(MAJOR_NR, DEVICE_NAME, &drbd_ops))
-		return -EBUSY;
+
+	err = register_blkdev(MAJOR_NR, DEVICE_NAME
+			      NOT_IN_26(, &drbd_ops)
+			      );
+	if (err) return err;
 
 	/*
 	 * allocate all necessary structs
@@ -1228,16 +1238,31 @@
 #else
 	for (i = 0; i < minor_count; i++) {
 		drbd_dev    *mdev = drbd_conf + i;
-		struct gendisk         **disk = &mdev->vdisk;
-		request_queue_t        **q    = &mdev->rq_queue;
+		struct gendisk         *disk;
+		request_queue_t        *q;
 
-		*q = blk_alloc_queue(GFP_KERNEL);
-		if (!*q) goto Enomem;
+		q = blk_alloc_queue(GFP_KERNEL);
+		if (!q) goto Enomem;
+		mdev->rq_queue = q;
+		q->queuedata   = mdev;
+
+		disk = alloc_disk(1);
+		if (!disk) goto Enomem;
+		mdev->vdisk = disk;
+
+		set_disk_ro( disk, TRUE );
+
+		disk->queue = q;
+		disk->major = MAJOR_NR;
+		disk->first_minor = i;
+		disk->fops = &drbd_ops;
+		sprintf(disk->disk_name, DEVICE_NAME "%d", i);
+		sprintf(disk->devfs_name, DEVICE_NAME "/%d", i);
+		disk->private_data = mdev;
+		add_disk(disk);
 
-		*disk = alloc_disk(1);
-		if (!*disk) goto Enomem;
-
-		set_disk_ro( *disk, TRUE );
+		// THINK do we need this?
+		mdev->this_bdev = bdget(MKDEV(MAJOR_NR,i));
 	}
 #endif
 
@@ -1248,10 +1273,10 @@
 		drbd_dev    *mdev = &drbd_conf[i];
 		struct page *page = alloc_page(GFP_KERNEL);
 
-		NOT_IN_26(
+NOT_IN_26(
 		drbd_blocksizes[i] = INITIAL_BLOCK_SIZE;
 		set_device_ro( MKDEV(MAJOR_NR, i), TRUE );
-		)
+)
 
 		if(!page) goto Enomem;
 		drbd_init_bio(&mdev->md_io_bio,512);
@@ -1286,10 +1311,10 @@
 #else
 # error "Currently drbd depends on the proc file system (CONFIG_PROC_FS)"
 #endif
-	NOT_IN_26(
+NOT_IN_26(
 	blksize_size[MAJOR_NR] = drbd_blocksizes;
 	blk_size[MAJOR_NR] = drbd_sizes;
-	)
+)
 
 #ifdef CONFIG_DEVFS_FS
 	devfs_handle = devfs_mk_dir (NULL, "nbd", NULL);
@@ -1299,7 +1324,7 @@
 			      &drbd_ops, NULL);
 # endif
 
-	blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR),drbd_make_request);
+	NOT_IN_26(blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR),drbd_make_request);)
 
 #if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)
 	// tell the kernel that we think our ioctls are 64bit clean
@@ -1367,9 +1392,12 @@
 	devfs_unregister(devfs_handle);
 #endif
 
+#warning "FIXME increase module refcount with each setup device"
+	/* then you need to tear down all devices
+	 * before you can remove the module */
 	for (i = 0; i < minor_count; i++) {
 		drbd_set_state(drbd_conf+i,Secondary);
-		fsync_dev(MKDEV(MAJOR_NR, i));
+		drbd_sync_me(drbd_conf+i);
 		set_bit(DO_NOT_INC_CONCNT,&drbd_conf[i].flags);
 		drbd_thread_stop(&drbd_conf[i].worker);
 		drbd_thread_stop(&drbd_conf[i].receiver);
@@ -1406,11 +1434,12 @@
 		fput(mdev->lo_file);
 		fput(mdev->md_file);
 		mdev->lo_file = 0;
+NOT_IN_26(
 		mdev->lo_device = 0;
-		mdev->md_file = 0;
 		mdev->md_device = 0;
-#warning FIXME
-		ONLY_IN_26(del_gendisk(&mdev->vdisk));
+)
+#warning "FIXME unset L26 members"
+		mdev->md_file = 0;
 	}
 }
 
@@ -1851,7 +1880,8 @@
 	sector_t sector;
 	int i;
 
-	if( mdev->lo_device == 0) return;
+#warning "FIXME maybe lo_file is ok, too?"
+	NOT_IN_26 ( if( mdev->lo_device == 0) return; )
 
 	down(&mdev->md_io_mutex);
 	buffer = (struct meta_data_on_disk *)drbd_bio_kmap(&mdev->md_io_bio);
@@ -1887,7 +1917,8 @@
 	sector_t sector;
 	int i;
 
-	if( mdev->lo_device == 0) return;
+#warning "FIXME maybe lo_file is ok, too?"
+	NOT_IN_26 ( if( mdev->lo_device == 0) return; )
 
 	down(&mdev->md_io_mutex);
 
@@ -1895,7 +1926,7 @@
 
 	drbd_md_prepare_read(mdev,sector);
 	drbd_generic_make_request_wait(READ,&mdev->md_io_bio);
-	ERR_IF( ! buffer_uptodate(&mdev->md_io_bio) ) goto err;
+	ERR_IF( ! drbd_bio_uptodate(&mdev->md_io_bio) ) goto err;
 
 	buffer = (struct meta_data_on_disk *)drbd_bio_kmap(&mdev->md_io_bio);
 
@@ -1974,7 +2005,7 @@
 	read_unlock(&tasklist_lock);
 }
 
-#ifdef SIGHAND_HACK
+#if defined(SIGHAND_HACK) && LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 
 // copied from redhat's kernel-2.4.20-13.9 kernel/signal.c
 // to avoid a recompile of the redhat kernel
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.92
retrieving revision 1.97.2.93
diff -u -3 -r1.97.2.92 -r1.97.2.93
--- drbd_receiver.c	24 Jan 2004 17:59:10 -0000	1.97.2.92
+++ drbd_receiver.c	24 Jan 2004 18:28:26 -0000	1.97.2.93
@@ -39,6 +39,9 @@
 
 #include <asm/uaccess.h>
 #include <net/sock.h>
+
+#include <linux/tcp.h>
+
 #include <linux/version.h>
 #include <linux/fs.h>
 #include <linux/file.h>
@@ -251,7 +254,7 @@
 			if(drbd_alloc_ee(mdev,GFP_TRY)) av = 1;
 		}
 	}
-	if(!av) run_task_queue(&tq_disk);
+	NOT_IN_26 ( if(!av) run_task_queue(&tq_disk); )
 	return av;
 }
 
@@ -264,7 +267,7 @@
 
 	if(mdev->ee_vacant == EE_MININUM / 2) {
 		spin_unlock_irq(&mdev->ee_lock);
-		run_task_queue(&tq_disk);
+		NOT_IN_26( run_task_queue(&tq_disk); )
 		spin_lock_irq(&mdev->ee_lock);
 	}
 
@@ -381,7 +384,7 @@
 	spin_lock_irq(&mdev->ee_lock);
 	rv = list_empty(head);
 	spin_unlock_irq(&mdev->ee_lock);
-	if(!rv) run_task_queue(&tq_disk);
+	NOT_IN_26( if(!rv) run_task_queue(&tq_disk);)
 	return rv;
 }
 
@@ -447,6 +450,12 @@
 	return rv;
 }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+# define SK_(x)		x
+#else
+# define SK_(x)		sk_ ## x
+#endif
+
 int drbd_recv(drbd_dev *mdev, struct socket* sock,
 	      void *buf, size_t size)
 {
@@ -484,7 +493,7 @@
 			D_ASSERT(current == mdev->asender.task);
 
 			// FIXME decide this more elegantly
-			if ( mdev->meta.socket->sk->rcvtimeo == mdev->conf.ping_int*HZ) {
+			if ( mdev->meta.socket->sk->SK_(rcvtimeo) == mdev->conf.ping_int*HZ) {
 				C_DBG(0,"recv_header timed out, sending ping\n");
 				// goto do_ping;
 			} else {
@@ -526,7 +535,7 @@
 		if (!drbd_send_ping(mdev))
 			break;
 		// full ack timeout
-		mdev->meta.socket->sk->rcvtimeo = mdev->conf.timeout*HZ/10;
+		mdev->meta.socket->sk->SK_(rcvtimeo) = mdev->conf.timeout*HZ/10;
 
 	};
 
@@ -546,8 +555,8 @@
 		ERR("sock_creat(..)=%d\n", err);
 	}
 
-	sock->sk->rcvtimeo =
-	sock->sk->sndtimeo =  mdev->conf.try_connect_int*HZ;
+	sock->sk->SK_(rcvtimeo) =
+	sock->sk->SK_(sndtimeo) =  mdev->conf.try_connect_int*HZ;
 
 	err = sock->ops->connect(sock,
 				 (struct sockaddr *) mdev->conf.other_addr,
@@ -571,9 +580,9 @@
 		// FIXME return NULL ?
 	}
 
-	sock2->sk->reuse=1; /* SO_REUSEADDR */
-	sock2->sk->rcvtimeo =
-	sock2->sk->sndtimeo =  mdev->conf.try_connect_int*HZ;
+	sock2->sk->SK_(reuse)    = 1; /* SO_REUSEADDR */
+	sock2->sk->SK_(rcvtimeo) =
+	sock2->sk->SK_(sndtimeo) =  mdev->conf.try_connect_int*HZ;
 
 	err = sock2->ops->bind(sock2,
 			      (struct sockaddr *) mdev->conf.my_addr,
@@ -633,27 +642,29 @@
 
  connected:
 
-	msock->sk->reuse=1; /* SO_REUSEADDR */
-	sock->sk->reuse=1; /* SO_REUSEADDR */
+	msock->sk->SK_(reuse)=1; /* SO_REUSEADDR */
+	sock->sk->SK_(reuse)=1; /* SO_REUSEADDR */
 
 	/* to prevent oom deadlock... */
 	/* The default allocation priority was GFP_KERNEL */
-	sock->sk->allocation = GFP_DRBD;
-	msock->sk->allocation = GFP_DRBD;
+	sock->sk->SK_(allocation) = GFP_DRBD;
+	msock->sk->SK_(allocation) = GFP_DRBD;
 
-	sock->sk->priority=TC_PRIO_BULK;
-	sock->sk->tp_pinfo.af_tcp.nonagle=0;
+	sock->sk->SK_(priority)=TC_PRIO_BULK;
+	NOT_IN_26(sock->sk->tp_pinfo.af_tcp.nonagle=0;)
+	ONLY_IN_26( tcp_sk(sock->sk)->nonagle = 0;)
 	// FIXME fold to limits. should be done in drbd_ioctl
-	sock->sk->sndbuf = mdev->conf.sndbuf_size;
-	sock->sk->rcvbuf = mdev->conf.sndbuf_size;
-	sock->sk->sndtimeo = mdev->conf.timeout*HZ/20;
-	sock->sk->rcvtimeo = MAX_SCHEDULE_TIMEOUT;
-
-	msock->sk->priority=TC_PRIO_INTERACTIVE;
-	msock->sk->tp_pinfo.af_tcp.nonagle=1;
-	msock->sk->sndbuf = 2*32767;
-	msock->sk->sndtimeo = mdev->conf.timeout*HZ/20;
-	msock->sk->rcvtimeo = mdev->conf.ping_int*HZ;
+	sock->sk->SK_(sndbuf) = mdev->conf.sndbuf_size;
+	sock->sk->SK_(rcvbuf) = mdev->conf.sndbuf_size;
+	sock->sk->SK_(sndtimeo) = mdev->conf.timeout*HZ/20;
+	sock->sk->SK_(rcvtimeo) = MAX_SCHEDULE_TIMEOUT;
+
+	msock->sk->SK_(priority)=TC_PRIO_INTERACTIVE;
+	NOT_IN_26(sock->sk->tp_pinfo.af_tcp.nonagle=1;)
+	ONLY_IN_26(tcp_sk(sock->sk)->nonagle = 1;)
+	msock->sk->SK_(sndbuf) = 2*32767;
+	msock->sk->SK_(sndtimeo) = mdev->conf.timeout*HZ/20;
+	msock->sk->SK_(rcvtimeo) = mdev->conf.ping_int*HZ;
 
 	mdev->data.socket = sock;
 	mdev->meta.socket = msock;
@@ -720,7 +731,7 @@
 	mdev->last_received = jiffies;
 	if (sock == mdev->meta.socket) {
 		// restore idle timeout
-		mdev->meta.socket->sk->rcvtimeo = mdev->conf.ping_int*HZ;
+		mdev->meta.socket->sk->SK_(rcvtimeo) = mdev->conf.ping_int*HZ;
 	}
 	C_DBG(5,"on %s <<< %s l: %d\n",
 	    sock == mdev->meta.socket ? "msock" : "sock",
@@ -744,8 +755,10 @@
 
 	// DBG("got Barrier\n");
 
+NOT_IN_26(
 	if (mdev->conf.wire_protocol != DRBD_PROT_C)
 		run_task_queue(&tq_disk);
+)
 
 	drbd_wait_ee(mdev,&mdev->active_ee);
 
@@ -781,7 +794,7 @@
 	drbd_bio_kunmap(bio);
 
 	if ( rr != data_size) {
-		clear_bit(BH_Lock, &bio->b_state);
+		NOT_IN_26(clear_bit(BH_Lock, &bio->b_state);)
 		spin_lock_irq(&mdev->ee_lock);
 		drbd_put_ee(mdev,e);
 		spin_unlock_irq(&mdev->ee_lock);
@@ -800,9 +813,11 @@
 	 * This code is only with protocol C relevant.
 	 */
 #define NUMBER 24
+NOT_IN_26(
 	if(atomic_read(&mdev->unacked_cnt) >= NUMBER ) {
 		run_task_queue(&tq_disk);
 	}
+)
 #undef NUMBER
 
 	mdev->writ_cnt+=data_size>>9;
@@ -1412,7 +1427,7 @@
 
 STATIC int receive_WriteHint(drbd_dev *mdev, Drbd_Header *h)
 {
-	run_task_queue(&tq_disk);
+	NOT_IN_26(run_task_queue(&tq_disk);)
 	return TRUE; // cannot fail, only deadlock :)
 }
 
@@ -1594,7 +1609,7 @@
 STATIC int got_PingAck(drbd_dev *mdev, Drbd_Header* h)
 {
 	// restore idle timeout
-	mdev->meta.socket->sk->rcvtimeo = mdev->conf.ping_int*HZ;
+	mdev->meta.socket->sk->SK_(rcvtimeo) = mdev->conf.ping_int*HZ;
 
 	return TRUE;
 }
@@ -1675,7 +1690,7 @@
 			ERR_IF(!drbd_send_ping(mdev)) goto err;
 			// half ack timeout only,
 			// since sendmsg waited the other half already
-			mdev->meta.socket->sk->rcvtimeo =
+			mdev->meta.socket->sk->SK_(rcvtimeo) =
 				mdev->conf.timeout*HZ/20;
 		}
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_req-2.4.c,v
retrieving revision 1.33.2.41
retrieving revision 1.33.2.42
diff -u -3 -r1.33.2.41 -r1.33.2.42
--- drbd_req-2.4.c	24 Jan 2004 17:59:10 -0000	1.33.2.41
+++ drbd_req-2.4.c	24 Jan 2004 18:28:26 -0000	1.33.2.42
@@ -109,7 +109,6 @@
 	return NULL;
 }
 
-#warning "FIXME make 2.6.x clean"
 STATIC void drbd_issue_drequest(struct Drbd_Conf* mdev,drbd_bio_t *bio)
 {
 	struct Pending_read *pr;
@@ -128,32 +127,68 @@
 	list_add(&pr->w.list,&mdev->app_reads);
 	spin_unlock(&mdev->pr_lock);
 	inc_ap_pending(mdev);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 	drbd_send_drequest(mdev, DataRequest, bio->b_rsector, bio->b_size,
 			   (unsigned long)pr);
+#else
+# warning "FIXME make 2.6.x clean"
+#endif
 }
 
-// in 2.6 this is of the form
-// static int __make_request(request_queue_t *q, struct bio *bio)
-int drbd_make_request(request_queue_t *q, int rw, struct buffer_head *bh)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+int drbd_make_request(request_queue_t *q, int rw, struct buffer_head *bio)
+#else
+int drbd_make_request(request_queue_t *q, struct bio *bio)
+#endif
 {
-	struct Drbd_Conf* mdev = drbd_conf + MINOR(bh->b_rdev);
+	struct Drbd_Conf* mdev = 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+		drbd_conf + MINOR(bio->b_rdev);
+#else
+		(drbd_dev*) q->queuedata;
+#endif
 	drbd_request_t *req;
 	int send_ok;
+	int sector, size;
+	ONLY_IN_26(int rw = bio_rw(bio);)
 
-	if (MINOR(bh->b_rdev) >= minor_count || mdev->cstate < StandAlone) {
-		buffer_IO_error(bh);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+	if (MINOR(bio->b_rdev) >= minor_count || mdev->cstate < StandAlone) {
+		buffer_IO_error(bio);
 		return 0;
 	}
 
-	if( mdev->lo_device == 0 ) {
+#else
+# warning "FIXME"
+#endif
+
+	/* what do we know?
+	 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+	sector = bio->b_rsector;
+	size   = bio->b_size;
+#else
+	//      rw = bio->bi_rw & RW_MASK;
+	//      ra = bio->bi_rw & RWA_MASK;
+	      size = bio->bi_size;
+	    sector = bio->bi_sector;
+	/* barrier = bio_barrier(bio);
+	nr_sectors = bio_sectors(bio); */
+#endif
+
+#warning "please review"
+	// was: if( mdev->lo_device == 0 ) {
+	if( mdev->lo_file == 0 ) {
 		if( mdev->cstate < Connected ) {
-			bh->b_end_io(bh,0);
+			drbd_bio_IO_error(bio);
 			return 0;
 		}
 
+NOT_IN_26(
 		if(!test_and_set_bit(WRITE_HINT_QUEUED,&mdev->flags)) {
 			queue_task(&mdev->write_hint_tq, &tq_disk); // IO HINT
 		}
+)
 
 		// Fail READA ??
 		if( rw == WRITE ) {
@@ -161,34 +196,39 @@
 
 			if (!req) {
 				ERR("could not kmalloc() req\n");
-				bh->b_end_io(bh,0);
+				drbd_bio_IO_error(bio);
 				return 0;
 			}
 			SET_MAGIC(req);
 
-			req->rq_status = RQ_DRBD_WRITTEN | 1;
-			req->master_bio=bh;
-
-			if(mdev->conf.wire_protocol != DRBD_PROT_A) {
-				inc_ap_pending(mdev);
-			}
 			/* FIXME the drbd_make_request function will be
 			 * restructured soon.
 			 * until that is the case,
 			 * at least put the mdev and sector number into the
 			 * private bh!
 			 */
+			req->master_bio = bio;
 			drbd_req_prepare_write(mdev,req);
+			req->rq_status  = RQ_DRBD_WRITTEN | 1;
+
+			if(mdev->conf.wire_protocol != DRBD_PROT_A) {
+				inc_ap_pending(mdev);
+			}
 			drbd_send_dblock(mdev,req); // FIXME error check?
 		} else { // rw == READ || rw == READA
-			drbd_issue_drequest(mdev,bh);
+			drbd_issue_drequest(mdev,bio);
 		}
 		return 0; // Ok everything arranged
 	}
 
-	if( mdev->cstate == SyncTarget &&
-	    bm_get_bit(mdev->mbds_id,bh->b_rsector,bh->b_size) ) {
+#warning "FIXME pls review"
+	if ( mdev->cstate == SyncTarget &&
+	     bm_get_bit(mdev->mbds_id,sector,size) ) {
 		struct Pending_read *pr;
+	/* FIXME we need to check not only the sector, but the _size_, too.
+	 * As I pointed out already, I think s this has to be changed
+	 * completely!	-lge
+	 */
 		if( rw == WRITE ) {
 			// Actually nothing special to do.
 			// Just do a mirrored write.
@@ -196,13 +236,13 @@
 			// via drbd_[rs|al]_[begin|end]_io()
 		} else { // rw == READ || rw == READA
 			spin_lock(&mdev->pr_lock);
-			pr=drbd_find_read(bh->b_rsector,&mdev->resync_reads);
+			pr=drbd_find_read(sector,&mdev->resync_reads);
 			if(pr) {
 				INFO("Upgraded a resync read\n");
 
 				pr->cause |= Application;
 				inc_ap_pending(mdev);
-				pr->d.master_bio=bh;
+				pr->d.master_bio=bio;
 				list_del(&pr->w.list);
 				list_add(&pr->w.list,&mdev->app_reads);
 				spin_unlock(&mdev->pr_lock);
@@ -210,26 +250,35 @@
 			}
 
 			spin_unlock(&mdev->pr_lock);
-			drbd_issue_drequest(mdev,bh);
+			drbd_issue_drequest(mdev,bio);
 			return 0;
 		}
 	}
 
 	if( rw == READ || rw == READA ) {
-		mdev->read_cnt+=bh->b_size>>9;
-
-		bh->b_rdev = mdev->lo_device;
+		mdev->read_cnt += size >> 9;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+		bio->b_rdev = mdev->lo_device;
+#else
+# warning "FIXME"
+		/* I want to change it anyways so we never remap ... */
+#endif
 		return 1; // Not arranged for transfer ( but remapped :)
 	}
 
-	mdev->writ_cnt+=bh->b_size>>9;
+	mdev->writ_cnt += size >> 9;
 
 	if(mdev->cstate<Connected || test_bit(PARTNER_DISKLESS,&mdev->flags)) {
-		drbd_set_out_of_sync(mdev,bh->b_rsector,bh->b_size);
+		drbd_set_out_of_sync(mdev,sector,size);
 
-		drbd_al_begin_io(mdev, bh->b_rsector);
-		drbd_al_complete_io(mdev, bh->b_rsector); // FIXME TODO
-		bh->b_rdev = mdev->lo_device;
+		drbd_al_begin_io(mdev, sector);
+		drbd_al_complete_io(mdev, sector); // FIXME TODO
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+		bio->b_rdev = mdev->lo_device;
+#else
+# warning "FIXME"
+		/* I want to change it anyways so we never remap ... */
+#endif
 		return 1; // Not arranged for transfer ( but remapped :)
 	}
 
@@ -239,12 +288,12 @@
 
 	if (!req) {
 		ERR("could not kmalloc() req\n");
-		bh->b_end_io(bh,0);
+		drbd_bio_IO_error(bio);
 		return 0;
 	}
 	SET_MAGIC(req);
 
-	req->master_bio = bh;
+	req->master_bio = bio;
 	drbd_req_prepare_write(mdev,req);
 
 	send_ok=drbd_send_dblock(mdev,req);
@@ -256,11 +305,13 @@
 				   an ack packet. */
 		drbd_end_req(req, RQ_DRBD_SENT, 1, drbd_req_get_sector(req));
 	}
-	if(!send_ok) drbd_set_out_of_sync(mdev,bh->b_rsector,bh->b_size);
+	if(!send_ok) drbd_set_out_of_sync(mdev,sector,size);
 
+NOT_IN_26(
 	if(!test_and_set_bit(WRITE_HINT_QUEUED,&mdev->flags)) {
 		queue_task(&mdev->write_hint_tq, &tq_disk);
 	}
+)
 
 	drbd_al_begin_io(mdev, drbd_req_get_sector(req));