[DRBD-cvs] drbd by phil; This patch makes it a lot easier to comp...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Wed, 24 Mar 2004 14:14:12 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
This patch makes it a lot easier to compile DRBD into the kernel.
-- You also need a small patch maintained by Kees Cook --
[This patch is also by Kees Cook, ugglified by me.]

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Makefile,v
retrieving revision 1.14.2.21
retrieving revision 1.14.2.22
diff -u -3 -r1.14.2.21 -r1.14.2.22
--- Makefile	8 Feb 2004 19:53:19 -0000	1.14.2.21
+++ Makefile	24 Mar 2004 13:14:06 -0000	1.14.2.22
@@ -32,7 +32,8 @@
     $(error "won't compile with this kernel version")
   endif
 
-  # linux 2.6 style:
+  CFLAGS    += -I$(DRBDSRC)
+
   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 drbd_actlog.o \
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.79
retrieving revision 1.1.2.80
diff -u -3 -r1.1.2.79 -r1.1.2.80
--- drbd_actlog.c	15 Mar 2004 14:10:36 -0000	1.1.2.79
+++ drbd_actlog.c	24 Mar 2004 13:14:06 -0000	1.1.2.80
@@ -25,7 +25,7 @@
  */
 
 #include <linux/slab.h>
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 #define AL_EXTENTS_PT 61
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.87
retrieving revision 1.1.2.88
diff -u -3 -r1.1.2.87 -r1.1.2.88
--- drbd_dsender.c	19 Mar 2004 14:25:54 -0000	1.1.2.87
+++ drbd_dsender.c	24 Mar 2004 13:14:06 -0000	1.1.2.88
@@ -41,7 +41,7 @@
 #define __KERNEL_SYSCALLS__
 #include <linux/slab.h>
 
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 /* I choose to have all block layer end_io handlers defined here.
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.76
retrieving revision 1.28.2.77
diff -u -3 -r1.28.2.76 -r1.28.2.77
--- drbd_fs.c	6 Mar 2004 09:31:27 -0000	1.28.2.76
+++ drbd_fs.c	24 Mar 2004 13:14:06 -0000	1.28.2.77
@@ -43,7 +43,7 @@
 #include <linux/file.h>
 #include <linux/slab.h>
 #include <linux/utsname.h>
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,0)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.140
retrieving revision 1.58.2.141
diff -u -3 -r1.58.2.140 -r1.58.2.141
--- drbd_int.h	15 Mar 2004 17:32:19 -0000	1.58.2.140
+++ drbd_int.h	24 Mar 2004 13:14:06 -0000	1.58.2.141
@@ -191,10 +191,14 @@
 # define LOCK_SIGMASK(task,flags)   spin_lock_irqsave(&task->sighand->siglock, flags)
 # define UNLOCK_SIGMASK(task,flags) spin_unlock_irqrestore(&task->sighand->siglock, flags)
 # define RECALC_SIGPENDING(TSK)     (recalc_sigpending_tsk(TSK))
+
+# ifndef MODULE
 // defined in drbd_main.c,
 // copied from redhat's kernel-2.4.20-13.9 kernel/signal.c
 // to avoid a recompile of the redhat kernel
 inline void recalc_sigpending_tsk(struct task_struct *t);
+# endif
+
 #else
 # define LOCK_SIGMASK(task,flags)   spin_lock_irqsave(&task->sigmask_lock, flags)
 # define UNLOCK_SIGMASK(task,flags) spin_unlock_irqrestore(&task->sigmask_lock, flags)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.145
retrieving revision 1.73.2.146
diff -u -3 -r1.73.2.145 -r1.73.2.146
--- drbd_main.c	11 Mar 2004 13:50:16 -0000	1.73.2.145
+++ drbd_main.c	24 Mar 2004 13:14:06 -0000	1.73.2.146
@@ -67,7 +67,7 @@
 #include <linux/unistd.h>
 #include <linux/vmalloc.h>
 
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
@@ -98,8 +98,13 @@
 MODULE_PARM_DESC(disable_io_hints, "Necessary if loopback devices are used for DRBD" );
 
 // module parameter, defined
+#ifdef MODULE
 int minor_count = 2;
 int disable_io_hints = 0;
+#else
+int minor_count = 8;
+int disable_io_hints = 0;
+#endif
 
 // global panic flag
 volatile int drbd_did_panic = 0;
@@ -127,8 +132,6 @@
 
 #define ARRY_SIZE(A) (sizeof(A)/sizeof(A[0]))
 
-int errno;
-
 /************************* The transfer log start */
 STATIC int tl_init(drbd_dev *mdev)
 {
@@ -1178,10 +1181,26 @@
 	return -ENOMEM;
 }
 
-void drbd_cleanup(void)
+static void __exit drbd_cleanup(void)
 {
 	int i, rr;
+
 	if (drbd_conf) {
+		for (i = 0; i < minor_count; i++) {
+			drbd_dev    *mdev = drbd_conf + i;
+
+			if (mdev) {
+				down(&mdev->device_mutex);
+				drbd_set_state(mdev,Secondary);
+				up(&mdev->device_mutex);
+				drbd_sync_me(mdev);
+				set_bit(DO_NOT_INC_CONCNT,&mdev->flags);
+				drbd_thread_stop(&mdev->worker);
+				drbd_thread_stop(&mdev->receiver);
+				drbd_thread_stop(&mdev->asender);
+			}
+		}
+
 		if (drbd_proc)
 			remove_proc_entry("drbd",&proc_root);
 		i=minor_count;
@@ -1239,6 +1258,23 @@
 		drbd_destroy_mempools();
 	}
 
+#if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)
+	lock_kernel();
+	unregister_ioctl32_conversion(DRBD_IOCTL_GET_VERSION);
+	unregister_ioctl32_conversion(DRBD_IOCTL_SET_STATE);
+	unregister_ioctl32_conversion(DRBD_IOCTL_SET_DISK_CONFIG);
+	unregister_ioctl32_conversion(DRBD_IOCTL_SET_NET_CONFIG);
+	unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_NET);
+	unregister_ioctl32_conversion(DRBD_IOCTL_GET_CONFIG);
+	unregister_ioctl32_conversion(DRBD_IOCTL_INVALIDATE);
+	unregister_ioctl32_conversion(DRBD_IOCTL_INVALIDATE_REM);
+	unregister_ioctl32_conversion(DRBD_IOCTL_SET_SYNC_CONFIG);
+	unregister_ioctl32_conversion(DRBD_IOCTL_SET_DISK_SIZE);
+	unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_CONNECT);
+	unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_SYNC);
+	unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_DISK);
+	unlock_kernel();
+#endif
 
 NOT_IN_26(
 	blksize_size[MAJOR_NR] = NULL;
@@ -1249,6 +1285,12 @@
 )
 	kfree(drbd_conf);
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+	devfs_unregister(devfs_handle);
+#else
+	devfs_remove(DEVFS_NAME);
+#endif
+
 	if (unregister_blkdev(MAJOR_NR, DEVICE_NAME) != 0)
 		printk(KERN_ERR DEVICE_NAME": unregister of device failed\n");
 
@@ -1265,14 +1307,35 @@
 
 int __init drbd_init(void)
 {
+#if 0
+/* I am too lazy to calculate this by hand	-lge
+ */
+#define SZO(x) printk(KERN_ERR "sizeof(" #x ") = %d\n", sizeof(x))
+	SZO(struct Drbd_Conf);
+	SZO(struct buffer_head);
+	SZO(Drbd_Polymorph_Packet);
+	SZO(struct drbd_socket);
+	SZO(struct semaphore);
+	SZO(wait_queue_head_t);
+	SZO(spinlock_t);
+	return -EBUSY;
+#endif
 
 	int i,err;
 
+	if (1 > minor_count||minor_count > 255) {
+		printk(KERN_ERR DEVICE_NAME
+			": invalid minor_count (%d)\n",minor_count);
+		return -EINVAL;
+	}
 
 	err = register_blkdev(MAJOR_NR, DEVICE_NAME
 			      NOT_IN_26(, &drbd_ops)
 			      );
-	if (err) return err;
+	if (err) {
+		printk(KERN_ERR DEVICE_NAME": unable to register block device\n");
+		return err;
+	}
 
 	/*
 	 * allocate all necessary structs
@@ -1411,88 +1474,21 @@
 	unlock_kernel();
 #endif
 
+	printk(KERN_INFO DEVICE_NAME ": initialised. "
+	       "Version: " REL_VERSION " (api:%d/proto:%d)\n",
+	       API_VERSION,PRO_VERSION);
+
 	return 0; // Success!
 
   Enomem:
 	drbd_cleanup();
 	if (err == -ENOMEM) // currently always the case
 		printk(KERN_ERR DEVICE_NAME ": ran out of memory\n");
+	else
+		printk(KERN_ERR DEVICE_NAME ": initialization failure\n");
 	return err;
 }
 
-int __init init_module(void)
-{
-#if 0
-/* I am too lazy to calculate this by hand	-lge
- */
-#define SZO(x) printk(KERN_ERR "sizeof(" #x ") = %d\n", sizeof(x))
-	SZO(struct Drbd_Conf);
-	SZO(struct buffer_head);
-	SZO(Drbd_Polymorph_Packet);
-	SZO(struct drbd_socket);
-	SZO(struct semaphore);
-	SZO(wait_queue_head_t);
-	SZO(spinlock_t);
-	return -EBUSY;
-#endif
-
-	if (1 > minor_count||minor_count > 255) {
-		printk(KERN_ERR DEVICE_NAME
-			": invalid minor_count (%d)\n",minor_count);
-		return -EINVAL;
-	}
-
-	printk(KERN_INFO DEVICE_NAME ": initialised. "
-	       "Version: " REL_VERSION " (api:%d/proto:%d)\n",
-	       API_VERSION,PRO_VERSION);
-
-	return drbd_init();
-}
-
-void cleanup_module(void)
-{
-	int i;
-
-	for (i = 0; i < minor_count; i++) {
-		drbd_dev    *mdev = drbd_conf + i;
-
-		down(&mdev->device_mutex);
-		drbd_set_state(mdev,Secondary);
-		up(&mdev->device_mutex);
-		drbd_sync_me(mdev);
-		set_bit(DO_NOT_INC_CONCNT,&mdev->flags);
-		drbd_thread_stop(&mdev->worker);
-		drbd_thread_stop(&mdev->receiver);
-		drbd_thread_stop(&mdev->asender);
-	}
-
-#if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)
-	lock_kernel();
-	unregister_ioctl32_conversion(DRBD_IOCTL_GET_VERSION);
-	unregister_ioctl32_conversion(DRBD_IOCTL_SET_STATE);
-	unregister_ioctl32_conversion(DRBD_IOCTL_SET_DISK_CONFIG);
-	unregister_ioctl32_conversion(DRBD_IOCTL_SET_NET_CONFIG);
-	unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_NET);
-	unregister_ioctl32_conversion(DRBD_IOCTL_GET_CONFIG);
-	unregister_ioctl32_conversion(DRBD_IOCTL_INVALIDATE);
-	unregister_ioctl32_conversion(DRBD_IOCTL_INVALIDATE_REM);
-	unregister_ioctl32_conversion(DRBD_IOCTL_SET_SYNC_CONFIG);
-	unregister_ioctl32_conversion(DRBD_IOCTL_SET_DISK_SIZE);
-	unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_CONNECT);
-	unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_SYNC);
-	unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_DISK);
-	unlock_kernel();
-#endif
-
-	drbd_cleanup();
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-	devfs_unregister(devfs_handle);
-#else
-	devfs_remove(DEVFS_NAME);
-#endif
-}
-
 void drbd_free_ll_dev(drbd_dev *mdev)
 {
 	struct file *lo_file;
@@ -2011,7 +2007,7 @@
 	mdev->gen_cnt[order]++;
 }
 
-#ifdef SIGHAND_HACK
+#if defined(SIGHAND_HACK) && defined(MODULE)
 
 /* copied from linux-2.6/kernel/signal.c
  * because recalc_sigpending_tsk is not exported,
@@ -2064,3 +2060,6 @@
 }
 
 #endif
+
+module_init(drbd_init)
+module_exit(drbd_cleanup)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_proc.c,v
retrieving revision 1.8.2.21
retrieving revision 1.8.2.22
diff -u -3 -r1.8.2.21 -r1.8.2.22
--- drbd_proc.c	15 Feb 2004 14:40:11 -0000	1.8.2.21
+++ drbd_proc.c	24 Mar 2004 13:14:06 -0000	1.8.2.22
@@ -39,7 +39,7 @@
 #include <linux/file.h>
 #include <linux/slab.h>
 #include <linux/proc_fs.h>
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 int drbd_proc_get_info(char *, char **, off_t, int, int *, void *);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.125
retrieving revision 1.97.2.126
diff -u -3 -r1.97.2.125 -r1.97.2.126
--- drbd_receiver.c	19 Mar 2004 11:29:43 -0000	1.97.2.125
+++ drbd_receiver.c	24 Mar 2004 13:14:06 -0000	1.97.2.126
@@ -51,7 +51,7 @@
 #define __KERNEL_SYSCALLS__
 #include <linux/unistd.h>
 #include <linux/vmalloc.h>
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 #define EE_MININUM 32    // @4k pages => 128 KByte
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_req-2.4.c,v
retrieving revision 1.33.2.61
retrieving revision 1.33.2.62
diff -u -3 -r1.33.2.61 -r1.33.2.62
--- drbd_req-2.4.c	15 Mar 2004 17:32:19 -0000	1.33.2.61
+++ drbd_req-2.4.c	24 Mar 2004 13:14:06 -0000	1.33.2.62
@@ -32,7 +32,7 @@
 #endif
 
 #include <linux/slab.h>
-#include "drbd.h"
+#include <linux/drbd.h>
 #include "drbd_int.h"
 
 void drbd_end_req(drbd_request_t *req, int nextstate, int er_flags,