
From: "Michael S. Tsirkin" <mst@mellanox.co.il>

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 <mst@mellanox.co.il>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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,
_
