[DRBD-cvs] drbd by phil; Make it work on sparc64 systems (probabe...
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Sun, 18 Jan 2004 21:18:19 +0100 (CET)
DRBD CVS committal
Author : phil
Module : drbd
Dir : drbd/drbd
Modified Files:
drbd_main.c
Log Message:
Make it work on sparc64 systems (probabely on other 32/64 bit systems too)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -3 -r1.89 -r1.90
--- drbd_main.c 6 Jan 2004 10:06:25 -0000 1.89
+++ drbd_main.c 18 Jan 2004 20:18:19 -0000 1.90
@@ -57,6 +57,16 @@
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <linux/slab.h>
+
+#if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)
+extern int register_ioctl32_conversion(unsigned int cmd,
+ int (*handler)(unsigned int,
+ unsigned int,
+ unsigned long,
+ struct file *));
+extern int unregister_ioctl32_conversion(unsigned int cmd);
+#endif
+
#define __KERNEL_SYSCALLS__
#include <linux/unistd.h>
@@ -1184,6 +1194,23 @@
blksize_size[MAJOR_NR] = drbd_blocksizes;
blk_size[MAJOR_NR] = drbd_sizes; /* Size in Kb */
+#if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)
+ lock_kernel();
+ register_ioctl32_conversion(DRBD_IOCTL_DO_SYNC_ALL,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_GET_CONFIG,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_GET_VERSION,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_SECONDARY_REM,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_SET_DISK_CONFIG,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_SET_NET_CONFIG,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_SET_STATE,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_SET_SYNC_CONFIG,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_BOTH,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_NET,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_WAIT_CONNECT,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_WAIT_SYNC,NULL);
+ unlock_kernel();
+#endif
+
return 0;
}
@@ -1252,6 +1279,22 @@
kfree(drbd_blocksizes);
kfree(drbd_sizes);
kfree(drbd_conf);
+#if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)
+ lock_kernel();
+ unregister_ioctl32_conversion(DRBD_IOCTL_DO_SYNC_ALL);
+ unregister_ioctl32_conversion(DRBD_IOCTL_GET_CONFIG);
+ unregister_ioctl32_conversion(DRBD_IOCTL_GET_VERSION);
+ unregister_ioctl32_conversion(DRBD_IOCTL_SECONDARY_REM);
+ unregister_ioctl32_conversion(DRBD_IOCTL_SET_DISK_CONFIG);
+ unregister_ioctl32_conversion(DRBD_IOCTL_SET_NET_CONFIG);
+ unregister_ioctl32_conversion(DRBD_IOCTL_SET_STATE);
+ unregister_ioctl32_conversion(DRBD_IOCTL_SET_SYNC_CONFIG);
+ unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_BOTH);
+ unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_NET);
+ unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_CONNECT);
+ unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_SYNC);
+ unlock_kernel();
+#endif
}