[PATCH] add ->compat_ioctl to dasd
Add a compat_ioctl method to the dasd driver so the last entries in arch/s390/kernel/compat_ioctl.c can go away. Unlike the previous attempt this one does not replace the ioctl method with an unlocked_ioctl method so that the ioctl_by_bdev calls in s390 partition code continue to work. Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: 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
ec3cad9690
commit
8262037f40
@ -42,27 +42,6 @@ struct ioctl_trans ioctl_start[] = {
|
|||||||
#include <linux/compat_ioctl.h>
|
#include <linux/compat_ioctl.h>
|
||||||
#define DECLARES
|
#define DECLARES
|
||||||
#include "../../../fs/compat_ioctl.c"
|
#include "../../../fs/compat_ioctl.c"
|
||||||
|
|
||||||
/* s390 only ioctls */
|
|
||||||
COMPATIBLE_IOCTL(DASDAPIVER)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDDISABLE)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDENABLE)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDRSRV)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDRLSE)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDSLCK)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDINFO)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDINFO2)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDFMT)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDPRRST)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDQUIESCE)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDRESUME)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDPRRD)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDPSRD)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDGATTR)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDSATTR)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDCMFENABLE)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDCMFDISABLE)
|
|
||||||
COMPATIBLE_IOCTL(BIODASDREADALLCMB)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int ioctl_table_size = ARRAY_SIZE(ioctl_start);
|
int ioctl_table_size = ARRAY_SIZE(ioctl_start);
|
||||||
|
@ -1751,6 +1751,7 @@ dasd_device_operations = {
|
|||||||
.open = dasd_open,
|
.open = dasd_open,
|
||||||
.release = dasd_release,
|
.release = dasd_release,
|
||||||
.ioctl = dasd_ioctl,
|
.ioctl = dasd_ioctl,
|
||||||
|
.compat_ioctl = dasd_compat_ioctl,
|
||||||
.getgeo = dasd_getgeo,
|
.getgeo = dasd_getgeo,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -527,6 +527,7 @@ void dasd_ioctl_exit(void);
|
|||||||
int dasd_ioctl_no_register(struct module *, int, dasd_ioctl_fn_t);
|
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_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);
|
||||||
|
|
||||||
/* externals in dasd_proc.c */
|
/* externals in dasd_proc.c */
|
||||||
int dasd_proc_init(void);
|
int dasd_proc_init(void);
|
||||||
|
@ -118,6 +118,18 @@ dasd_ioctl(struct inode *inp, struct file *filp,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
dasd_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||||
|
{
|
||||||
|
int rval;
|
||||||
|
|
||||||
|
lock_kernel();
|
||||||
|
rval = dasd_ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
|
||||||
|
unlock_kernel();
|
||||||
|
|
||||||
|
return (rval == -EINVAL) ? -ENOIOCTLCMD : rval;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dasd_ioctl_api_version(struct block_device *bdev, int no, long args)
|
dasd_ioctl_api_version(struct block_device *bdev, int no, long args)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user