[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,