diff --git a/libcfs/include/libcfs/linux/libcfs.h b/libcfs/include/libcfs/linux/libcfs.h
index 7f8f97bd6a992d36cff1711b6f294f5ceb5796a0..0f67a87096c0abc22223368d2bcda6b9ae57cc79 100644
--- a/libcfs/include/libcfs/linux/libcfs.h
+++ b/libcfs/include/libcfs/linux/libcfs.h
@@ -53,7 +53,6 @@
 #include <linux/kernel.h>
 #include <linux/kmod.h>
 #include <linux/kthread.h>
-#include <linux/miscdevice.h>
 #include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
diff --git a/libcfs/include/libcfs/util/ioctl.h b/libcfs/include/libcfs/util/ioctl.h
index eddd4f1dd31ccccadd85a1102760430c1e3e7fe5..b6f4f67f30c221521b42b27726f86e59a6178dd6 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 72a3a4fd6e90ba72d98b28b973b51aa3a811302f..6d6768d4bcba78483b086bf917ec461c5ffbd4e8 100644
--- a/libcfs/libcfs/linux/linux-debug.c
+++ b/libcfs/libcfs/linux/linux-debug.c
@@ -53,7 +53,6 @@
 #include <linux/fs.h>
 #include <linux/stat.h>
 #include <asm/uaccess.h>
-#include <linux/miscdevice.h>
 #include <linux/version.h>
 
 # define DEBUG_SUBSYSTEM S_LNET
diff --git a/libcfs/libcfs/linux/linux-module.c b/libcfs/libcfs/linux/linux-module.c
index 6da5565c52729e29e889eeccee80bb0188782c29..839f9324ac5caf77b305f6a9a33245cd0fb63389 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 <linux/miscdevice.h>
 #include <libcfs/libcfs.h>
 
-#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 6ec93f40c779b0253d058812974859dacbd229a0..cdfd83e466c525e1253e51e5aea4052526ccfee9 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 <linux/miscdevice.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
diff --git a/libcfs/libcfs/util/l_ioctl.c b/libcfs/libcfs/util/l_ioctl.c
index 1615f0b9583bf6241ae6903d55506b72fdb8bb5b..2e696484c4cba4c777a6fb1403997298e160ef5c 100644
--- a/libcfs/libcfs/util/l_ioctl.c
+++ b/libcfs/libcfs/util/l_ioctl.c
@@ -38,25 +38,12 @@
 #include <linux/lnet/lnetctl.h>
 
 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 <linux/kdev_t.h>, 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/uapi/linux/lnet/lnetctl.h b/lnet/include/uapi/linux/lnet/lnetctl.h
index c39ca43aae39f0490f7aa06177c67fb2a4ad6ccd..49d7215b5ce06af4cf2ddd2975ab5f007dafadbd 100644
--- a/lnet/include/uapi/linux/lnet/lnetctl.h
+++ b/lnet/include/uapi/linux/lnet/lnetctl.h
@@ -134,7 +134,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 b3728372e20d8ae82f9ddf3bc2cfcbc016508c53..969143b2f6f807a1ddfcc005d39eed04dab73c93 100644
--- a/lnet/utils/lnetconfig/liblnetconfig.c
+++ b/lnet/utils/lnetconfig/liblnetconfig.c
@@ -396,8 +396,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 e5e8abb614f59860b90393b576b97de596a08c16..c47fd5da63408709606aa475a597cb8e2b67fe49 100644
--- a/lnet/utils/lst.c
+++ b/lnet/utils/lst.c
@@ -3336,8 +3336,7 @@ main(int argc, char **argv)
 #ifdef USE_DLC
 	rc = lustre_lnet_config_lib_init();
 #else
-	rc = register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH,
-			      LNET_DEV_MAJOR, LNET_DEV_MINOR);
+	rc = register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH);
 #endif
 	if (rc < 0)
 		goto errorout;
diff --git a/lustre/include/uapi/linux/lustre/lustre_ioctl.h b/lustre/include/uapi/linux/lustre/lustre_ioctl.h
index 9a28842f89977e598f5477a8b9c04a9c1f581b6d..3cf23505fcacbd55dc6f386d206df3bb01f0baf3 100644
--- a/lustre/include/uapi/linux/lustre/lustre_ioctl.h
+++ b/lustre/include/uapi/linux/lustre/lustre_ioctl.h
@@ -66,8 +66,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 6648a0e0c684a8a7f99f2b8cde3a7fa186bb2b23..56be7fd1241666fe960838424e85ad4049351588 100644
--- a/lustre/obdclass/class_obd.c
+++ b/lustre/obdclass/class_obd.c
@@ -32,6 +32,7 @@
 
 #define DEBUG_SUBSYSTEM S_CLASS
 
+#include <linux/miscdevice.h>
 #include <linux/user_namespace.h>
 #ifdef HAVE_UIDGID_HEADER
 # include <linux/uidgid.h>
@@ -448,7 +449,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 6441c0358315b874244afd162bb3f1f071d9be85..5d0782e181c97cf33cf50e1ac185276444dc7502 100644
--- a/lustre/obdclass/linux/linux-module.c
+++ b/lustre/obdclass/linux/linux-module.c
@@ -41,7 +41,6 @@
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
-#include <linux/major.h>
 #include <linux/sched.h>
 #include <linux/lp.h>
 #include <linux/slab.h>
@@ -269,9 +268,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 fc971dc14919d3006a56513762ce1f88fcf12aa6..c005a98af31a9a6f45d482da43b68980c481cb30 100644
--- a/lustre/utils/lustre_rsync.c
+++ b/lustre/utils/lustre_rsync.c
@@ -1793,8 +1793,7 @@ int main(int argc, char *argv[])
 
         /* This plumbing is needed for some of the ioctls behind
            llapi calls to work. */
-	register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH,
-			 OBD_DEV_MAJOR, OBD_DEV_MINOR);
+	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 33b67cafe0907ff95380911cbc07cf33b20236e4..0cc3361dbfe780cc4672d5ed61640b4df7693f98 100644
--- a/lustre/utils/obd.c
+++ b/lustre/utils/obd.c
@@ -2864,8 +2864,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;
 }
diff --git a/lustre/utils/portals.c b/lustre/utils/portals.c
index 12aec42cf02b2c6ba9a267777d1c42638e57b39c..3597eaf561ce8df39e0789ce0ab127d23f15f496 100644
--- a/lustre/utils/portals.c
+++ b/lustre/utils/portals.c
@@ -287,8 +287,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;
 }