[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));