From 705863d6e6d03c47b67c179f7b07e54ea36817e5 Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Tue, 24 Oct 2017 10:28:57 -0500 Subject: [PATCH] LU-10086 libcfs: use dynamic minors for /dev/{lnet,obd} Request dynamic minor allocation when registering /dev/lnet and /dev/obd. Remove the obsolete create-device-if-not-found code from register_ioc_dev(). Lustre-change: https://review.whamcloud.com/29741 Lustre-commit: e446c1667dc9136e3a1cb3603c3851975b68e0ac Signed-off-by: John L. Hammond Change-Id: I59c70912b4729f58a76dc6107b3e1d7379c6d7a3 Reviewed-by: Andreas Dilger Reviewed-by: Jian Yu Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/29945 Tested-by: Jenkins Tested-by: Maloo --- libcfs/include/libcfs/linux/libcfs.h | 1 - libcfs/include/libcfs/util/ioctl.h | 2 +- libcfs/libcfs/linux/linux-debug.c | 1 - libcfs/libcfs/linux/linux-module.c | 5 ++--- libcfs/libcfs/module.c | 1 + libcfs/libcfs/util/l_ioctl.c | 33 +++----------------------------- lnet/include/lnet/lnetctl.h | 2 -- lnet/utils/lnetconfig/liblnetconfig.c | 3 +-- lnet/utils/lst.c | 4 ++++ lnet/utils/portals.c | 4 ++-- lustre/include/uapi/linux/lustre_ioctl.h | 6 ++++-- lustre/obdclass/class_obd.c | 3 ++- lustre/obdclass/linux/linux-module.c | 7 +++---- lustre/utils/lustre_rsync.c | 7 +++---- lustre/utils/obd.c | 3 +-- 15 files changed, 27 insertions(+), 55 deletions(-) diff --git a/libcfs/include/libcfs/linux/libcfs.h b/libcfs/include/libcfs/linux/libcfs.h index 7f8f97b..0f67a87 100644 --- a/libcfs/include/libcfs/linux/libcfs.h +++ b/libcfs/include/libcfs/linux/libcfs.h @@ -53,7 +53,6 @@ #include #include #include -#include #include #include #include diff --git a/libcfs/include/libcfs/util/ioctl.h b/libcfs/include/libcfs/util/ioctl.h index 4f2dd88..600bf27 100644 --- a/libcfs/include/libcfs/util/ioctl.h +++ b/libcfs/include/libcfs/util/ioctl.h @@ -62,7 +62,7 @@ do { \ /* FIXME - rename these to libcfs_ */ int libcfs_ioctl_pack(struct libcfs_ioctl_data *data, char **pbuf, int max); void libcfs_ioctl_unpack(struct libcfs_ioctl_data *data, char *pbuf); -int register_ioc_dev(int dev_id, const char *dev_name, int major, int minor); +int register_ioc_dev(int dev_id, const char *dev_name); void unregister_ioc_dev(int dev_id); int l_ioctl(int dev_id, unsigned int opc, void *buf); #endif diff --git a/libcfs/libcfs/linux/linux-debug.c b/libcfs/libcfs/linux/linux-debug.c index 72a3a4f..6d6768d 100644 --- a/libcfs/libcfs/linux/linux-debug.c +++ b/libcfs/libcfs/linux/linux-debug.c @@ -53,7 +53,6 @@ #include #include #include -#include #include # define DEBUG_SUBSYSTEM S_LNET diff --git a/libcfs/libcfs/linux/linux-module.c b/libcfs/libcfs/linux/linux-module.c index 6da5565..839f932 100644 --- a/libcfs/libcfs/linux/linux-module.c +++ b/libcfs/libcfs/linux/linux-module.c @@ -32,10 +32,9 @@ #define DEBUG_SUBSYSTEM S_LNET +#include #include -#define LNET_MINOR 240 - static inline size_t libcfs_ioctl_packlen(struct libcfs_ioctl_data *data) { size_t len = sizeof(*data); @@ -168,7 +167,7 @@ static struct file_operations libcfs_fops = { }; struct miscdevice libcfs_dev = { - .minor = LNET_MINOR, + .minor = MISC_DYNAMIC_MINOR, .name = "lnet", .fops = &libcfs_fops }; diff --git a/libcfs/libcfs/module.c b/libcfs/libcfs/module.c index e8080f3..b70a135 100644 --- a/libcfs/libcfs/module.c +++ b/libcfs/libcfs/module.c @@ -29,6 +29,7 @@ * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. */ +#include #include #include #include diff --git a/libcfs/libcfs/util/l_ioctl.c b/libcfs/libcfs/util/l_ioctl.c index 0cf8924..ceec870 100644 --- a/libcfs/libcfs/util/l_ioctl.c +++ b/libcfs/libcfs/util/l_ioctl.c @@ -38,25 +38,12 @@ #include struct ioc_dev { - const char * dev_name; - int dev_fd; - int dev_major; - int dev_minor; + const char *dev_name; + int dev_fd; }; static struct ioc_dev ioc_dev_list[10]; -struct dump_hdr { - int magic; - int dev_id; - unsigned int opc; -}; - -/* Catamount has no , so just define it here */ -#ifndef MKDEV -# define MKDEV(a,b) (((a) << 8) | (b)) -#endif - static int open_ioc_dev(int dev_id) { @@ -75,17 +62,6 @@ open_ioc_dev(int dev_id) if (ioc_dev_list[dev_id].dev_fd < 0) { int fd = open(dev_name, O_RDWR); - /* Make the /dev/ node if we need to */ - if (fd < 0 && errno == ENOENT) { - if (mknod(dev_name, S_IFCHR|S_IWUSR|S_IRUSR, - MKDEV(ioc_dev_list[dev_id].dev_major, - ioc_dev_list[dev_id].dev_minor)) == 0) - fd = open(dev_name, O_RDWR); - else - fprintf(stderr, "mknod %s failed: %s\n", - dev_name, strerror(errno)); - } - if (fd < 0) { fprintf(stderr, "opening %s failed: %s\n" "hint: the kernel modules may not be loaded\n", @@ -114,9 +90,8 @@ int l_ioctl(int dev_id, unsigned int opc, void *buf) /* register a device to send ioctls to. */ int -register_ioc_dev(int dev_id, const char *dev_name, int major, int minor) +register_ioc_dev(int dev_id, const char *dev_name) { - if (dev_id < 0 || dev_id >= sizeof(ioc_dev_list) / sizeof(ioc_dev_list[0])) return -EINVAL; @@ -125,8 +100,6 @@ register_ioc_dev(int dev_id, const char *dev_name, int major, int minor) ioc_dev_list[dev_id].dev_name = dev_name; ioc_dev_list[dev_id].dev_fd = -1; - ioc_dev_list[dev_id].dev_major = major; - ioc_dev_list[dev_id].dev_minor = minor; return dev_id; } diff --git a/lnet/include/lnet/lnetctl.h b/lnet/include/lnet/lnetctl.h index 3d7fd27..bdd0cb4 100644 --- a/lnet/include/lnet/lnetctl.h +++ b/lnet/include/lnet/lnetctl.h @@ -126,7 +126,5 @@ struct lnet_fault_stat { #define LNET_DEV_ID 0 #define LNET_DEV_PATH "/dev/lnet" -#define LNET_DEV_MAJOR 10 -#define LNET_DEV_MINOR 240 #endif diff --git a/lnet/utils/lnetconfig/liblnetconfig.c b/lnet/utils/lnetconfig/liblnetconfig.c index 2630d7e..9b915df 100644 --- a/lnet/utils/lnetconfig/liblnetconfig.c +++ b/lnet/utils/lnetconfig/liblnetconfig.c @@ -334,8 +334,7 @@ failed: int lustre_lnet_config_lib_init(void) { - return register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH, - LNET_DEV_MAJOR, LNET_DEV_MINOR); + return register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH); } void lustre_lnet_config_lib_uninit(void) diff --git a/lnet/utils/lst.c b/lnet/utils/lst.c index 78359fe..4c2e182 100644 --- a/lnet/utils/lst.c +++ b/lnet/utils/lst.c @@ -3336,6 +3336,10 @@ main(int argc, char **argv) if (rc < 0) goto errorout; + rc = register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH); + if (rc < 0) + goto errorout; + Parser_init("lst > ", lst_cmdlist); if (argc != 1) { diff --git a/lnet/utils/portals.c b/lnet/utils/portals.c index 81aedd5..015afd3 100644 --- a/lnet/utils/portals.c +++ b/lnet/utils/portals.c @@ -286,8 +286,8 @@ int ptl_initialize(int argc, char **argv) if (argc > 1) g_net_interactive = true; - register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH, - LNET_DEV_MAJOR, LNET_DEV_MINOR); + register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH); + return 0; } diff --git a/lustre/include/uapi/linux/lustre_ioctl.h b/lustre/include/uapi/linux/lustre_ioctl.h index 2e8ee29..cb4ec46 100644 --- a/lustre/include/uapi/linux/lustre_ioctl.h +++ b/lustre/include/uapi/linux/lustre_ioctl.h @@ -33,6 +33,10 @@ #include #include +#ifndef __KERNEL__ +# define __user +#endif + #if !defined(__KERNEL__) && !defined(LUSTRE_UTILS) # error This file is for Lustre internal use only. #endif @@ -57,8 +61,6 @@ enum md_echo_cmd { #define OBD_DEV_ID 1 #define OBD_DEV_NAME "obd" #define OBD_DEV_PATH "/dev/" OBD_DEV_NAME -#define OBD_DEV_MAJOR 10 -#define OBD_DEV_MINOR 241 #define OBD_IOCTL_VERSION 0x00010004 #define OBD_DEV_BY_DEVNAME 0xffffd0de diff --git a/lustre/obdclass/class_obd.c b/lustre/obdclass/class_obd.c index d65a85d..913ae54 100644 --- a/lustre/obdclass/class_obd.c +++ b/lustre/obdclass/class_obd.c @@ -32,6 +32,7 @@ #define DEBUG_SUBSYSTEM S_CLASS +#include #include #ifdef HAVE_UIDGID_HEADER # include @@ -532,7 +533,7 @@ static int __init obdclass_init(void) err = misc_register(&obd_psdev); if (err) { - CERROR("cannot register %d err %d\n", OBD_DEV_MINOR, err); + CERROR("cannot register OBD miscdevice: err = %d\n", err); goto cleanup_class_handle; } diff --git a/lustre/obdclass/linux/linux-module.c b/lustre/obdclass/linux/linux-module.c index 6cee4d7..dabbf58 100644 --- a/lustre/obdclass/linux/linux-module.c +++ b/lustre/obdclass/linux/linux-module.c @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -267,9 +266,9 @@ static struct file_operations obd_psdev_fops = { /* modules setup */ struct miscdevice obd_psdev = { - .minor = OBD_DEV_MINOR, - .name = OBD_DEV_NAME, - .fops = &obd_psdev_fops, + .minor = MISC_DYNAMIC_MINOR, + .name = OBD_DEV_NAME, + .fops = &obd_psdev_fops, }; static ssize_t version_show(struct kobject *kobj, struct attribute *attr, diff --git a/lustre/utils/lustre_rsync.c b/lustre/utils/lustre_rsync.c index 2be588c..7d9dc09 100644 --- a/lustre/utils/lustre_rsync.c +++ b/lustre/utils/lustre_rsync.c @@ -120,8 +120,10 @@ #include #include #include +#include #include +#include #include #include #include @@ -1792,10 +1794,7 @@ int main(int argc, char *argv[]) /* This plumbing is needed for some of the ioctls behind llapi calls to work. */ - if (obd_initialize(argc, argv) < 0) { - fprintf(stderr, "obd_initialize failed.\n"); - exit(-1); - } + register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH); rc = lr_locate_rsync(); if (use_rsync && rc != 0) { diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index c521d2b..2e84177 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -2862,8 +2862,7 @@ int obd_initialize(int argc, char **argv) if (shmem_setup() != 0) return -1; - register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH, - OBD_DEV_MAJOR, OBD_DEV_MINOR); + register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH); return 0; } -- 1.8.3.1