git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
drivers
/
char
/
raw.c
diff --git
a/drivers/char/raw.c
b/drivers/char/raw.c
index
579868a
..
30e4cbe
100644
(file)
--- a/
drivers/char/raw.c
+++ b/
drivers/char/raw.c
@@
-10,6
+10,7
@@
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/fs.h>
+#include <linux/devfs_fs_kernel.h>
#include <linux/major.h>
#include <linux/blkdev.h>
#include <linux/module.h>
#include <linux/major.h>
#include <linux/blkdev.h>
#include <linux/module.h>
@@
-18,7
+19,6
@@
#include <linux/uio.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/uio.h>
#include <linux/cdev.h>
#include <linux/device.h>
-#include <linux/mutex.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
@@
-29,8
+29,8
@@
struct raw_device_data {
static struct class *raw_class;
static struct raw_device_data raw_devices[MAX_RAW_MINORS];
static struct class *raw_class;
static struct raw_device_data raw_devices[MAX_RAW_MINORS];
-static DE
FIN
E_MUTEX(raw_mutex);
-static
const struct file_operations raw_ctl_fops;
/* forward declaration */
+static DE
CLAR
E_MUTEX(raw_mutex);
+static
struct file_operations raw_ctl_fops;
/* forward declaration */
/*
* Open/close code for raw IO.
/*
* Open/close code for raw IO.
@@
-53,7
+53,7
@@
static int raw_open(struct inode *inode, struct file *filp)
return 0;
}
return 0;
}
-
mutex_lock
(&raw_mutex);
+
down
(&raw_mutex);
/*
* All we need to do on open is check that the device is bound.
/*
* All we need to do on open is check that the device is bound.
@@
-78,7
+78,7
@@
static int raw_open(struct inode *inode, struct file *filp)
filp->f_dentry->d_inode->i_mapping =
bdev->bd_inode->i_mapping;
filp->private_data = bdev;
filp->f_dentry->d_inode->i_mapping =
bdev->bd_inode->i_mapping;
filp->private_data = bdev;
-
mutex_unlock
(&raw_mutex);
+
up
(&raw_mutex);
return 0;
out2:
return 0;
out2:
@@
-86,7
+86,7
@@
out2:
out1:
blkdev_put(bdev);
out:
out1:
blkdev_put(bdev);
out:
-
mutex_unlock
(&raw_mutex);
+
up
(&raw_mutex);
return err;
}
return err;
}
@@
-99,14
+99,14
@@
static int raw_release(struct inode *inode, struct file *filp)
const int minor= iminor(inode);
struct block_device *bdev;
const int minor= iminor(inode);
struct block_device *bdev;
-
mutex_lock
(&raw_mutex);
+
down
(&raw_mutex);
bdev = raw_devices[minor].binding;
if (--raw_devices[minor].inuse == 0) {
/* Here inode->i_mapping == bdev->bd_inode->i_mapping */
inode->i_mapping = &inode->i_data;
inode->i_mapping->backing_dev_info = &default_backing_dev_info;
}
bdev = raw_devices[minor].binding;
if (--raw_devices[minor].inuse == 0) {
/* Here inode->i_mapping == bdev->bd_inode->i_mapping */
inode->i_mapping = &inode->i_data;
inode->i_mapping->backing_dev_info = &default_backing_dev_info;
}
-
mutex_unlock
(&raw_mutex);
+
up
(&raw_mutex);
bd_release(bdev);
blkdev_put(bdev);
bd_release(bdev);
blkdev_put(bdev);
@@
-187,9
+187,9
@@
static int raw_ctl_ioctl(struct inode *inode, struct file *filp,
goto out;
}
goto out;
}
-
mutex_lock
(&raw_mutex);
+
down
(&raw_mutex);
if (rawdev->inuse) {
if (rawdev->inuse) {
-
mutex_unlock
(&raw_mutex);
+
up
(&raw_mutex);
err = -EBUSY;
goto out;
}
err = -EBUSY;
goto out;
}
@@
-211,11
+211,11
@@
static int raw_ctl_ioctl(struct inode *inode, struct file *filp,
bind_device(&rq);
}
}
bind_device(&rq);
}
}
-
mutex_unlock
(&raw_mutex);
+
up
(&raw_mutex);
} else {
struct block_device *bdev;
} else {
struct block_device *bdev;
-
mutex_lock
(&raw_mutex);
+
down
(&raw_mutex);
bdev = rawdev->binding;
if (bdev) {
rq.block_major = MAJOR(bdev->bd_dev);
bdev = rawdev->binding;
if (bdev) {
rq.block_major = MAJOR(bdev->bd_dev);
@@
-223,7
+223,7
@@
static int raw_ctl_ioctl(struct inode *inode, struct file *filp,
} else {
rq.block_major = rq.block_minor = 0;
}
} else {
rq.block_major = rq.block_minor = 0;
}
-
mutex_unlock
(&raw_mutex);
+
up
(&raw_mutex);
if (copy_to_user((void __user *)arg, &rq, sizeof(rq))) {
err = -EFAULT;
goto out;
if (copy_to_user((void __user *)arg, &rq, sizeof(rq))) {
err = -EFAULT;
goto out;
@@
-261,7
+261,7
@@
static ssize_t raw_file_aio_write(struct kiocb *iocb, const char __user *buf,
}
}
-static
const
struct file_operations raw_fops = {
+static struct file_operations raw_fops = {
.read = generic_file_read,
.aio_read = generic_file_aio_read,
.write = raw_file_write,
.read = generic_file_read,
.aio_read = generic_file_aio_read,
.write = raw_file_write,
@@
-274,7
+274,7
@@
static const struct file_operations raw_fops = {
.owner = THIS_MODULE,
};
.owner = THIS_MODULE,
};
-static
const
struct file_operations raw_ctl_fops = {
+static struct file_operations raw_ctl_fops = {
.ioctl = raw_ctl_ioctl,
.open = raw_open,
.owner = THIS_MODULE,
.ioctl = raw_ctl_ioctl,
.open = raw_open,
.owner = THIS_MODULE,
@@
-287,6
+287,7
@@
static struct cdev raw_cdev = {
static int __init raw_init(void)
{
static int __init raw_init(void)
{
+ int i;
dev_t dev = MKDEV(RAW_MAJOR, 0);
if (register_chrdev_region(dev, MAX_RAW_MINORS, "raw"))
dev_t dev = MKDEV(RAW_MAJOR, 0);
if (register_chrdev_region(dev, MAX_RAW_MINORS, "raw"))
@@
-308,6
+309,13
@@
static int __init raw_init(void)
}
class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl");
}
class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl");
+ devfs_mk_cdev(MKDEV(RAW_MAJOR, 0),
+ S_IFCHR | S_IRUGO | S_IWUGO,
+ "raw/rawctl");
+ for (i = 1; i < MAX_RAW_MINORS; i++)
+ devfs_mk_cdev(MKDEV(RAW_MAJOR, i),
+ S_IFCHR | S_IRUGO | S_IWUGO,
+ "raw/raw%d", i);
return 0;
error:
return 0;
error:
@@
-317,6
+325,12
@@
error:
static void __exit raw_exit(void)
{
static void __exit raw_exit(void)
{
+ int i;
+
+ for (i = 1; i < MAX_RAW_MINORS; i++)
+ devfs_remove("raw/raw%d", i);
+ devfs_remove("raw/rawctl");
+ devfs_remove("raw");
class_device_destroy(raw_class, MKDEV(RAW_MAJOR, 0));
class_destroy(raw_class);
cdev_del(&raw_cdev);
class_device_destroy(raw_class, MKDEV(RAW_MAJOR, 0));
class_destroy(raw_class);
cdev_del(&raw_cdev);