From: "Michael S. Tsirkin" Handle generic ioctl commands by falling back on static conversion functions in fs/compat_ioctl.c on -ENOIOCTLCMD code. Signed-off-by: Michael S. Tsirkin Signed-off-by: Andrew Morton --- 25-akpm/fs/compat.c | 3 ++- 25-akpm/fs/ioctl.c | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff -puN fs/compat.c~make-standard-conversions-work-with-compat_ioctl fs/compat.c --- 25/fs/compat.c~make-standard-conversions-work-with-compat_ioctl 2005-01-06 08:33:03.951535288 -0800 +++ 25-akpm/fs/compat.c 2005-01-06 08:33:03.958534224 -0800 @@ -438,7 +438,8 @@ asmlinkage long compat_sys_ioctl(unsigne if (filp->f_op && filp->f_op->compat_ioctl) { error = filp->f_op->compat_ioctl(filp, cmd, arg); - goto out_fput; + if (error != -ENOIOCTLCMD) + goto out_fput; } if (!filp->f_op || diff -puN fs/ioctl.c~make-standard-conversions-work-with-compat_ioctl fs/ioctl.c --- 25/fs/ioctl.c~make-standard-conversions-work-with-compat_ioctl 2005-01-06 08:33:03.952535136 -0800 +++ 25-akpm/fs/ioctl.c 2005-01-06 08:33:03.959534072 -0800 @@ -26,6 +26,9 @@ static long do_ioctl(struct file *filp, if (filp->f_op->unlocked_ioctl) { error = filp->f_op->unlocked_ioctl(filp, cmd, arg); + if (error == -ENOIOCTLCMD) + error = -EINVAL; + goto out; } else if (filp->f_op->ioctl) { lock_kernel(); error = filp->f_op->ioctl(filp->f_dentry->d_inode, _