All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH] [media] v4l2 core: return -ENOIOCTLCMD if an ioctl doesn't exist
Date: Sun, 26 Jun 2011 13:20:21 -0300	[thread overview]
Message-ID: <4E075C45.3010200@redhat.com> (raw)
In-Reply-To: <4E0752E0.5030901@iki.fi>

Hi Sakari,

Em 26-06-2011 12:40, Sakari Ailus escreveu:
> Mauro Carvalho Chehab wrote:
>> Currently, -EINVAL is used to return either when an IOCTL is not
>> implemented, or if the ioctl was not implemented.
> 
> Hi Mauro,
> 
> Thanks for the patch.
> 
> The V4L2 core probably should return -ENOIOCTLCMD when an IOCTL isn't implemented, but as long as vfs_ioctl() would stay as it is, the user space would still get -EINVAL. Or is vfs_ioctl() about to change?
> 
> fs/ioctl.c:
> ----8<-----------
> static long vfs_ioctl(struct file *filp, unsigned int cmd,
>                       unsigned long arg)
> {
>         int error = -ENOTTY;
> 
>         if (!filp->f_op || !filp->f_op->unlocked_ioctl)
>                 goto out;
> 
>         error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
>         if (error == -ENOIOCTLCMD)
>                 error = -EINVAL;
>  out:
>         return error;
> }
> ----8<-----------
> 

Good catch!

At the recent git history, the return for -ENOIOCTLCMD were modified
by this changeset:

commit b19dd42faf413b4705d4adb38521e82d73fa4249
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Sun Jul 4 00:15:10 2010 +0200

    bkl: Remove locked .ioctl file operation
...
@@ -39,21 +38,12 @@ static long vfs_ioctl(struct file *filp, unsigned int cmd,
 {
        int error = -ENOTTY;
 
-   if (!filp->f_op)
+ if (!filp->f_op || !filp->f_op->unlocked_ioctl)
                goto out;
 
-   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_path.dentry->d_inode,
-                                     filp, cmd, arg);
-           unlock_kernel();
...

Before Arnd's patch, locked ioctl's were returning -ENOIOCTLCMD, and
unlocked ones were returning -EINVAL. Now, the return of -ENOIOCTLCMD
doesn't go to userspace anymore. IMO, that's wrong and can cause
regressions, as some subsystems like DVB were returning -ENOIOCTLCMD
to userspace.

The right fix would be to remove this from fs:

diff --git a/fs/ioctl.c b/fs/ioctl.c
index 1d9b9fc..802fbbd 100644
--- a/fs/ioctl.c
+++ b/fs/ioctl.c
@@ -41,8 +41,6 @@ static long vfs_ioctl(struct file *filp, unsigned int cmd,
 		goto out;
 
 	error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
-	if (error == -ENOIOCTLCMD)
-		error = -EINVAL;
  out:
 	return error;
 }

However, the replacement from -EINVAL to -ENOIOCTLCMD is there since 2.6.12 for
unlocked_ioctl:

$ git blame b19dd42f^1 fs/ioctl.c 
...
^1da177e (Linus Torvalds    2005-04-16 15:20:36 -0700  46)              error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
^1da177e (Linus Torvalds    2005-04-16 15:20:36 -0700  47)              if (error == -ENOIOCTLCMD)
^1da177e (Linus Torvalds    2005-04-16 15:20:36 -0700  48)                      error = -EINVAL;

Linus,

what would be the expected behaviour?

Thanks,
Mauro

  reply	other threads:[~2011-06-26 16:20 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-24 23:11 [PATCH] [media] v4l2 core: return -ENOIOCTLCMD if an ioctl doesn't exist Mauro Carvalho Chehab
2011-06-26 15:40 ` Sakari Ailus
2011-06-26 16:20   ` Mauro Carvalho Chehab [this message]
2011-06-26 17:13     ` Arnd Bergmann
2011-06-26 17:30       ` Mauro Carvalho Chehab
2011-06-26 18:20         ` Arnd Bergmann
2011-06-26 18:51           ` Mauro Carvalho Chehab
2011-06-26 19:52             ` Arnd Bergmann
2011-06-27  5:38             ` Hans Verkuil
2011-06-27 12:02               ` Sakari Ailus
2011-06-27 12:17                 ` Hans Verkuil
2011-06-27 12:17                   ` Hans Verkuil
2011-06-27 13:54                   ` Mauro Carvalho Chehab
2011-06-27 14:56                     ` Hans Verkuil
2011-06-27 15:33                       ` Mauro Carvalho Chehab
2011-06-27 16:14                         ` Arnd Bergmann
2011-06-27 16:42                           ` Mauro Carvalho Chehab
2011-06-27 17:07                         ` Hans Verkuil
2011-06-27 20:37                           ` Mauro Carvalho Chehab
2011-06-27 20:48                           ` Linus Torvalds
2011-06-28  6:04                             ` Hans Verkuil
2011-06-28 16:05                               ` Linus Torvalds
2011-06-28 16:42                                 ` Alan Cox
2011-06-28 16:50                                   ` Arnd Bergmann
2011-06-29 12:34                                 ` Mauro Carvalho Chehab
2011-06-27 15:12                     ` Andy Walls
2011-06-27 15:12                       ` Andy Walls
2011-06-27 15:24                       ` Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E075C45.3010200@redhat.com \
    --to=mchehab@redhat.com \
    --cc=arnd@arndb.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=sakari.ailus@iki.fi \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.