patch-2.4.0-test3 linux/fs/devices.c

Next file: linux/fs/dquot.c
Previous file: linux/fs/devfs/util.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test2/linux/fs/devices.c linux/fs/devices.c
@@ -18,6 +18,7 @@
 #include <linux/fcntl.h>
 #include <linux/errno.h>
 #include <linux/module.h>
+#include <linux/smp_lock.h>
 #ifdef CONFIG_KMOD
 #include <linux/kmod.h>
 
@@ -143,6 +144,7 @@
 {
 	int ret = -ENODEV;
 
+	lock_kernel();
 	filp->f_op = fops_get(get_chrfops(MAJOR(inode->i_rdev),
 				MINOR(inode->i_rdev)));
 	if (filp->f_op) {
@@ -150,6 +152,7 @@
 		if (filp->f_op->open != NULL)
 			ret = filp->f_op->open(inode,filp);
 	}
+	unlock_kernel();
 	return ret;
 }
 
@@ -183,6 +186,15 @@
 	sprintf(buffer, "%s(%d,%d)", name, MAJOR(dev), MINOR(dev));
 	return buffer;
 }
+  
+static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
+{
+	return -ENXIO;
+}
+
+static struct file_operations bad_sock_fops = {
+	open:		sock_no_open
+};
 
 void init_special_inode(struct inode *inode, umode_t mode, int rdev)
 {
@@ -197,7 +209,7 @@
 	} else if (S_ISFIFO(mode))
 		inode->i_fop = &def_fifo_fops;
 	else if (S_ISSOCK(mode))
-		;
+		inode->i_fop = &bad_sock_fops;
 	else
 		printk(KERN_DEBUG "init_special_inode: bogus imode (%o)\n", mode);
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)