提交 82814dba 编写于 作者: C Christoph Hellwig 提交者: Linus Torvalds

[PATCH] s390: remove dynamic dasd ioctls

Now that there are no more users of the awkward dynamic ioctl hack we can
remove the code to support it.
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 8b2eb664
......@@ -69,15 +69,6 @@
*/
struct dasd_device;
typedef int (*dasd_ioctl_fn_t) (struct block_device *bdev, int no, long args);
struct dasd_ioctl {
struct list_head list;
struct module *owner;
int no;
dasd_ioctl_fn_t handler;
};
typedef enum {
dasd_era_fatal = -1, /* no chance to recover */
dasd_era_none = 0, /* don't recover, everything alright */
......@@ -524,8 +515,6 @@ int dasd_scan_partitions(struct dasd_device *);
void dasd_destroy_partitions(struct dasd_device *);
/* externals in dasd_ioctl.c */
int dasd_ioctl_no_register(struct module *, int, dasd_ioctl_fn_t);
int dasd_ioctl_no_unregister(struct module *, int, dasd_ioctl_fn_t);
int dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
long dasd_compat_ioctl(struct file *, unsigned int, unsigned long);
......
......@@ -24,59 +24,6 @@
#include "dasd_int.h"
/*
* SECTION: ioctl functions.
*/
static struct list_head dasd_ioctl_list = LIST_HEAD_INIT(dasd_ioctl_list);
/*
* Find the ioctl with number no.
*/
static struct dasd_ioctl *
dasd_find_ioctl(int no)
{
struct dasd_ioctl *ioctl;
list_for_each_entry (ioctl, &dasd_ioctl_list, list)
if (ioctl->no == no)
return ioctl;
return NULL;
}
/*
* Register ioctl with number no.
*/
int
dasd_ioctl_no_register(struct module *owner, int no, dasd_ioctl_fn_t handler)
{
struct dasd_ioctl *new;
if (dasd_find_ioctl(no))
return -EBUSY;
new = kmalloc(sizeof (struct dasd_ioctl), GFP_KERNEL);
if (new == NULL)
return -ENOMEM;
new->owner = owner;
new->no = no;
new->handler = handler;
list_add(&new->list, &dasd_ioctl_list);
return 0;
}
/*
* Deregister ioctl with number no.
*/
int
dasd_ioctl_no_unregister(struct module *owner, int no, dasd_ioctl_fn_t handler)
{
struct dasd_ioctl *old = dasd_find_ioctl(no);
if (old == NULL)
return -ENOENT;
if (old->no != no || old->handler != handler || owner != old->owner)
return -EINVAL;
list_del(&old->list);
kfree(old);
return 0;
}
static int
dasd_ioctl_api_version(void __user *argp)
......@@ -429,8 +376,6 @@ dasd_ioctl(struct inode *inode, struct file *file,
struct block_device *bdev = inode->i_bdev;
struct dasd_device *device = bdev->bd_disk->private_data;
void __user *argp = (void __user *)arg;
struct dasd_ioctl *ioctl;
int rc;
if (!device)
return -ENODEV;
......@@ -477,17 +422,6 @@ dasd_ioctl(struct inode *inode, struct file *file,
return rval;
}
/* else resort to the deprecated dynamic ioctl list */
list_for_each_entry(ioctl, &dasd_ioctl_list, list) {
if (ioctl->no == cmd) {
/* Found a matching ioctl. Call it. */
if (!try_module_get(ioctl->owner))
continue;
rc = ioctl->handler(bdev, cmd, arg);
module_put(ioctl->owner);
return rc;
}
}
return -EINVAL;
}
}
......@@ -503,6 +437,3 @@ dasd_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
return (rval == -EINVAL) ? -ENOIOCTLCMD : rval;
}
EXPORT_SYMBOL(dasd_ioctl_no_register);
EXPORT_SYMBOL(dasd_ioctl_no_unregister);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册