add ->compat_ioctl to dasd
Subsystems (3)
PATCH 2/3 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.
drivers/s390/block/dasd.c +1 -0
@@ -1751,6 +1751,7 @@ .open = dasd_open, .release = dasd_release, .ioctl = dasd_ioctl, + .compat_ioctl = dasd_compat_ioctl, .getgeo = dasd_getgeo, };
drivers/s390/block/dasd_int.h +1 -0
@@ -527,6 +527,7 @@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 );/* externals in dasd_proc.c */ int dasd_proc_init (void );
drivers/s390/block/dasd_ioctl.c +12 -0
@@ -118,6 +118,18 @@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; +} +static int dasd_ioctl_api_version (struct block_device *bdev,int no,long args) {
arch/s390/kernel/compat_ioctl.c +0 -21
@@ -42,27 +42,6 @@#include <linux/compat_ioctl.h> #define DECLARES #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);
Quoted 5 lines · Christoph Hellwig
Add a
compat_ioctlmethod to the dasd driver so the last entries inarch/s390/kernel/compat_ioctl.ccan go away. Unlike the previous attempt this one does not replace the ioctl method with anunlocked_ioctlmethod so that theioctl_by_bdevcalls in s390 partition code continue to work.
Looks better but still doesn't work. The dasd driver specific ioctls do work but there are some generic ones that are only available on the normal ioctl path, including BLKFLSBUF, BLKROSET and HDIO_GETGEO. That makes e.g. the 32 bit version of fdasd fail with "IOCTL error".
Signature · 6 lines
blue skies, Martin Martin Schwidefsky Linux for zSeries Development & Services IBM Deutschland Entwicklung GmbH
Quoted 11 lines · Martin Schwidefsky
Quoted 5 lines · Christoph Hellwig
Add a
compat_ioctlmethod to the dasd driver so the last entries inarch/s390/kernel/compat_ioctl.ccan go away. Unlike the previous attempt this one does not replace the ioctl method with anunlocked_ioctlmethod so that theioctl_by_bdevcalls in s390 partition code continue to work.Looks better but still doesn't work. The dasd driver specific ioctls do work but there are some generic ones that are only available on the normal ioctl path, including BLKFLSBUF, BLKROSET and
HDIO_GETGEO. That makes e.g. the 32 bit version of fdasd fail with "IOCTL error".
Sorry, that's the ENOIOCTLCMD thing again, I forgot it in the first revision of the last patch aswell.
Here's the fix for that:
drivers/s390/block/dasd_ioctl.c +1 -1
@@ -127,7 +127,7 @@ rval =dasd_ioctl (filp->f_dentry->d_inode, filp, cmd, arg);unlock_kernel (); -return rval; +return (rval == -EINVAL ) ? -ENOIOCTLCMD : rval; } static int
Quoted 8 lines · Christoph Hellwig
Quoted 7 lines · Martin Schwidefsky
Quoted 5 lines · Christoph Hellwig
Add a
compat_ioctlmethod to the dasd driver so the last entries inarch/s390/kernel/compat_ioctl.ccan go away. Unlike the previous attempt this one does not replace the ioctl method with anunlocked_ioctlmethod so that theioctl_by_bdevcalls in s390 partition code continue to work.
Quoted 7 lines
Quoted 4 lines
Looks better but still doesn't work. The dasd driver specific ioctls do work but there are some generic ones that are only available on the normal ioctl path, including BLKFLSBUF, BLKROSET and
HDIO_GETGEO. That makes e.g. the 32 bit version of fdasd fail with "IOCTL error".Sorry, that's the ENOIOCTLCMD thing again, I forgot it in the first revision of the last patch aswell.
Oh yes, I should have remember that fix. It works fine now.
Signature · 6 lines
blue skies, Martin Martin Schwidefsky Linux for zSeries Development & Services IBM Deutschland Entwicklung GmbH