|
@@ -26,7 +26,7 @@
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/sched.h>
|
|
|
-#include <linux/smp_lock.h>
|
|
|
+#include <linux/mutex.h>
|
|
|
#include <linux/backing-dev.h>
|
|
|
#include <linux/compat.h>
|
|
|
#include <linux/mount.h>
|
|
@@ -37,6 +37,7 @@
|
|
|
#include <asm/uaccess.h>
|
|
|
|
|
|
#define MTD_INODE_FS_MAGIC 0x11307854
|
|
|
+static DEFINE_MUTEX(mtd_mutex);
|
|
|
static struct vfsmount *mtd_inode_mnt __read_mostly;
|
|
|
|
|
|
/*
|
|
@@ -90,7 +91,7 @@ static int mtd_open(struct inode *inode, struct file *file)
|
|
|
if ((file->f_mode & FMODE_WRITE) && (minor & 1))
|
|
|
return -EACCES;
|
|
|
|
|
|
- lock_kernel();
|
|
|
+ mutex_lock(&mtd_mutex);
|
|
|
mtd = get_mtd_device(NULL, devnum);
|
|
|
|
|
|
if (IS_ERR(mtd)) {
|
|
@@ -138,7 +139,7 @@ static int mtd_open(struct inode *inode, struct file *file)
|
|
|
file->private_data = mfi;
|
|
|
|
|
|
out:
|
|
|
- unlock_kernel();
|
|
|
+ mutex_unlock(&mtd_mutex);
|
|
|
return ret;
|
|
|
} /* mtd_open */
|
|
|
|
|
@@ -866,9 +867,9 @@ static long mtd_unlocked_ioctl(struct file *file, u_int cmd, u_long arg)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- lock_kernel();
|
|
|
+ mutex_lock(&mtd_mutex);
|
|
|
ret = mtd_ioctl(file, cmd, arg);
|
|
|
- unlock_kernel();
|
|
|
+ mutex_unlock(&mtd_mutex);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
@@ -892,7 +893,7 @@ static long mtd_compat_ioctl(struct file *file, unsigned int cmd,
|
|
|
void __user *argp = compat_ptr(arg);
|
|
|
int ret = 0;
|
|
|
|
|
|
- lock_kernel();
|
|
|
+ mutex_lock(&mtd_mutex);
|
|
|
|
|
|
switch (cmd) {
|
|
|
case MEMWRITEOOB32:
|
|
@@ -927,7 +928,7 @@ static long mtd_compat_ioctl(struct file *file, unsigned int cmd,
|
|
|
ret = mtd_ioctl(file, cmd, (unsigned long)argp);
|
|
|
}
|
|
|
|
|
|
- unlock_kernel();
|
|
|
+ mutex_unlock(&mtd_mutex);
|
|
|
|
|
|
return ret;
|
|
|
}
|