[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: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8b2eb664ce
commit
82814dbafd
|
@ -69,15 +69,6 @@
|
||||||
*/
|
*/
|
||||||
struct dasd_device;
|
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 {
|
typedef enum {
|
||||||
dasd_era_fatal = -1, /* no chance to recover */
|
dasd_era_fatal = -1, /* no chance to recover */
|
||||||
dasd_era_none = 0, /* don't recover, everything alright */
|
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 *);
|
void dasd_destroy_partitions(struct dasd_device *);
|
||||||
|
|
||||||
/* externals in dasd_ioctl.c */
|
/* 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);
|
int dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
|
||||||
long dasd_compat_ioctl(struct file *, unsigned int, unsigned long);
|
long dasd_compat_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
|
|
||||||
|
|
|
@ -24,59 +24,6 @@
|
||||||
|
|
||||||
#include "dasd_int.h"
|
#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
|
static int
|
||||||
dasd_ioctl_api_version(void __user *argp)
|
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 block_device *bdev = inode->i_bdev;
|
||||||
struct dasd_device *device = bdev->bd_disk->private_data;
|
struct dasd_device *device = bdev->bd_disk->private_data;
|
||||||
void __user *argp = (void __user *)arg;
|
void __user *argp = (void __user *)arg;
|
||||||
struct dasd_ioctl *ioctl;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (!device)
|
if (!device)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -477,17 +422,6 @@ dasd_ioctl(struct inode *inode, struct file *file,
|
||||||
return rval;
|
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;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -503,6 +437,3 @@ dasd_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||||
|
|
||||||
return (rval == -EINVAL) ? -ENOIOCTLCMD : rval;
|
return (rval == -EINVAL) ? -ENOIOCTLCMD : rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dasd_ioctl_no_register);
|
|
||||||
EXPORT_SYMBOL(dasd_ioctl_no_unregister);
|
|
||||||
|
|
Loading…
Reference in New Issue