Re: [PATCH] deprecate (un)register_ioctl32_conversion

From: Christoph Hellwig
Date: Thu Jan 06 2005 - 10:33:52 EST


On Thu, Jan 06, 2005 at 05:22:48PM +0200, Michael S. Tsirkin wrote:
> > + if (!filp->f_op || !filp->f_op->ioctl)
> > + goto do_ioctl;
> > +
> > + if (filp->f_op || filp->f_op->compat_ioctl) {
> > error = filp->f_op->compat_ioctl(filp, cmd, arg);
> > goto out_fput;
> > }
>
> So now if I dont have ->ioctl the ioctl_compat wont be called.
> What if I only have unlocked_ioctl?

Indeed. In my test setup I didn't have a driver using both. So let's
think a little more what checks we want.

The original intention (pre-patch) was that without an ioctl entry
we'd skip the hash table lookup and skip right to trying the few standard
ioctls.

So with ->compat_ioctl we should try that one first, then checking
for either ->ioctl or ->unlocked_ioctl beeing there. Like the patch
below (this time it's actually untested because all my 64bit machines
are in use):


--- linux-2.6.10-mm2.orig/fs/compat.c 2005-01-06 11:40:18.831900000 +0100
+++ linux-2.6.10-mm2/fs/compat.c 2005-01-06 16:36:17.340977664 +0100
@@ -436,14 +436,15 @@
if (!filp)
goto out;

- if (!filp->f_op) {
- if (!filp->f_op->ioctl)
- goto do_ioctl;
- } else if (filp->f_op->compat_ioctl) {
+ if (filp->f_op && filp->f_op->compat_ioctl) {
error = filp->f_op->compat_ioctl(filp, cmd, arg);
goto out_fput;
}

+ if (!filp->f_op ||
+ (!filp->f_op->ioctl && !filp->f_op->unlocked_ioctl))
+ goto do_ioctl;
+
down_read(&ioctl32_sem);
for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
if (t->cmd == cmd)

>
>
> MST
---end quoted text---
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/