Appropriately use -ENOIOCTLCMD when
the ioctl is not implemented by a driver.
Signed-off-by: Alessandro Zummo <[email protected]>
---
drivers/rtc/rtc-dev.c | 6 +++---
drivers/rtc/rtc-sa1100.c | 2 +-
drivers/rtc/rtc-test.c | 2 +-
drivers/rtc/rtc-vr41xx.c | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
--- linux-rtc.orig/drivers/rtc/rtc-test.c 2006-05-17 01:21:35.000000000 +0200
+++ linux-rtc/drivers/rtc/rtc-test.c 2006-05-17 01:22:39.000000000 +0200
@@ -71,7 +71,7 @@ static int test_rtc_ioctl(struct device
return 0;
default:
- return -EINVAL;
+ return -ENOIOCTLCMD;
}
}
--- linux-rtc.orig/drivers/rtc/rtc-vr41xx.c 2006-05-17 01:21:59.000000000 +0200
+++ linux-rtc/drivers/rtc/rtc-vr41xx.c 2006-05-17 01:22:29.000000000 +0200
@@ -270,7 +270,7 @@ static int vr41xx_rtc_ioctl(struct devic
epoch = arg;
break;
default:
- return -EINVAL;
+ return -ENOIOCTLCMD;
}
return 0;
--- linux-rtc.orig/drivers/rtc/rtc-sa1100.c 2006-05-17 01:18:19.000000000 +0200
+++ linux-rtc/drivers/rtc/rtc-sa1100.c 2006-05-17 01:23:26.000000000 +0200
@@ -247,7 +247,7 @@ static int sa1100_rtc_ioctl(struct devic
rtc_freq = arg;
return 0;
}
- return -EINVAL;
+ return -ENOIOCTLCMD;
}
static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
--- linux-rtc.orig/drivers/rtc/rtc-dev.c 2006-05-17 01:18:19.000000000 +0200
+++ linux-rtc/drivers/rtc/rtc-dev.c 2006-05-17 01:26:01.000000000 +0200
@@ -141,13 +141,13 @@ static int rtc_dev_ioctl(struct inode *i
/* try the driver's ioctl interface */
if (ops->ioctl) {
err = ops->ioctl(class_dev->dev, cmd, arg);
- if (err != -EINVAL)
+ if (err != -ENOIOCTLCMD)
return err;
}
/* if the driver does not provide the ioctl interface
* or if that particular ioctl was not implemented
- * (-EINVAL), we will try to emulate here.
+ * (-ENOIOCTLCMD), we will try to emulate here.
*/
switch (cmd) {
@@ -233,7 +233,7 @@ static int rtc_dev_ioctl(struct inode *i
break;
default:
- err = -EINVAL;
+ err = -ENOIOCTLCMD;
break;
}
On Wed, 17 May 2006 01:30:33 +0200 Alessandro Zummo wrote:
>
>
> Appropriately use -ENOIOCTLCMD when
> the ioctl is not implemented by a driver.
so this return value does not go back to userspace?
Comment in linux/errno.h says:
/* Should never be seen by user programs */
and ENOTTY is the return value for "Inappropriate ioctl for device":
http://marc.theaimsgroup.com/?l=linux-fsdevel&m=106739260707476&w=2
http://marc.theaimsgroup.com/?l=lustre-devel&m=106737825024915&w=2
> Signed-off-by: Alessandro Zummo <[email protected]>
>
> ---
> drivers/rtc/rtc-dev.c | 6 +++---
> drivers/rtc/rtc-sa1100.c | 2 +-
> drivers/rtc/rtc-test.c | 2 +-
> drivers/rtc/rtc-vr41xx.c | 2 +-
> 4 files changed, 6 insertions(+), 6 deletions(-)
>
> --- linux-rtc.orig/drivers/rtc/rtc-test.c 2006-05-17 01:21:35.000000000 +0200
> +++ linux-rtc/drivers/rtc/rtc-test.c 2006-05-17 01:22:39.000000000 +0200
> @@ -71,7 +71,7 @@ static int test_rtc_ioctl(struct device
> return 0;
>
> default:
> - return -EINVAL;
> + return -ENOIOCTLCMD;
> }
> }
>
> --- linux-rtc.orig/drivers/rtc/rtc-vr41xx.c 2006-05-17 01:21:59.000000000 +0200
> +++ linux-rtc/drivers/rtc/rtc-vr41xx.c 2006-05-17 01:22:29.000000000 +0200
> @@ -270,7 +270,7 @@ static int vr41xx_rtc_ioctl(struct devic
> epoch = arg;
> break;
> default:
> - return -EINVAL;
> + return -ENOIOCTLCMD;
> }
>
> return 0;
> --- linux-rtc.orig/drivers/rtc/rtc-sa1100.c 2006-05-17 01:18:19.000000000 +0200
> +++ linux-rtc/drivers/rtc/rtc-sa1100.c 2006-05-17 01:23:26.000000000 +0200
> @@ -247,7 +247,7 @@ static int sa1100_rtc_ioctl(struct devic
> rtc_freq = arg;
> return 0;
> }
> - return -EINVAL;
> + return -ENOIOCTLCMD;
> }
>
> static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
> --- linux-rtc.orig/drivers/rtc/rtc-dev.c 2006-05-17 01:18:19.000000000 +0200
> +++ linux-rtc/drivers/rtc/rtc-dev.c 2006-05-17 01:26:01.000000000 +0200
> @@ -141,13 +141,13 @@ static int rtc_dev_ioctl(struct inode *i
> /* try the driver's ioctl interface */
> if (ops->ioctl) {
> err = ops->ioctl(class_dev->dev, cmd, arg);
> - if (err != -EINVAL)
> + if (err != -ENOIOCTLCMD)
> return err;
> }
>
> /* if the driver does not provide the ioctl interface
> * or if that particular ioctl was not implemented
> - * (-EINVAL), we will try to emulate here.
> + * (-ENOIOCTLCMD), we will try to emulate here.
> */
>
> switch (cmd) {
> @@ -233,7 +233,7 @@ static int rtc_dev_ioctl(struct inode *i
> break;
>
> default:
> - err = -EINVAL;
> + err = -ENOIOCTLCMD;
> break;
> }
>
> -
---
~Randy
On Wed, 17 May 2006 14:25:10 -0700
"Randy.Dunlap" <[email protected]> wrote:
> On Wed, 17 May 2006 01:30:33 +0200 Alessandro Zummo wrote:
>
> >
> >
> > Appropriately use -ENOIOCTLCMD when
> > the ioctl is not implemented by a driver.
>
> so this return value does not go back to userspace?
> Comment in linux/errno.h says:
> /* Should never be seen by user programs */
>
> and ENOTTY is the return value for "Inappropriate ioctl for device":
>
you're right. I'll go for ENOTTY. thanks.
--
Best regards,
Alessandro Zummo,
Tower Technologies - Turin, Italy
http://www.towertech.it
Followup to: <20060517232742.2ac4ccaa@inspiron>
By author: Alessandro Zummo <[email protected]>
In newsgroup: linux.dev.kernel
> >
> > and ENOTTY is the return value for "Inappropriate ioctl for device":
> >
>
> you're right. I'll go for ENOTTY. thanks.
>
ENOIOCTLCMD is right here, *except* in the very last hunk, because
it's a request to the upper layers to emulate the operation:
> --- linux-rtc.orig/drivers/rtc/rtc-dev.c 2006-05-17 01:18:19.000000000 +0200
> +++ linux-rtc/drivers/rtc/rtc-dev.c 2006-05-17 01:26:01.000000000 +0200
> @@ -141,13 +141,13 @@ static int rtc_dev_ioctl(struct inode *i
> /* try the driver's ioctl interface */
> if (ops->ioctl) {
> err = ops->ioctl(class_dev->dev, cmd, arg);
> - if (err != -EINVAL)
> + if (err != -ENOIOCTLCMD)
> return err;
> }
>
> /* if the driver does not provide the ioctl interface
> * or if that particular ioctl was not implemented
> - * (-EINVAL), we will try to emulate here.
> + * (-ENOIOCTLCMD), we will try to emulate here.
> */
>
> switch (cmd) {
> @@ -233,7 +233,7 @@ static int rtc_dev_ioctl(struct inode *i
> break;
>
> default:
> - err = -EINVAL;
> + err = -ENOIOCTLCMD;
> break;
> }
>
The last hunk should be ENOTTY.
-hpa
---
~Randy
Hi Hans Peter,
H. Peter Anvin wrote
> ENOIOCTLCMD is right here, *except* in the very last hunk, because
> it's a request to the upper layers to emulate the operation:
So would a patch like this be welcome and clear this up?
diff --git a/include/linux/errno.h b/include/linux/errno.h
index d90b80f..d33ae4b 100644
--- a/include/linux/errno.h
+++ b/include/linux/errno.h
@@ -9,7 +9,7 @@
#define ERESTARTSYS 512
#define ERESTARTNOINTR 513
#define ERESTARTNOHAND 514 /* restart if no handler.. */
-#define ENOIOCTLCMD 515 /* No ioctl command */
+#define ENOIOCTLCMD 515 /* No ioctl command, upper layer please emulate or pass ENOTTY to user space */
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
/* Defined for the NFSv3 protocol */
Regards
Ingo Oeser
Ingo Oeser wrote:
> Hi Hans Peter,
>
> H. Peter Anvin wrote
>> ENOIOCTLCMD is right here, *except* in the very last hunk, because
>> it's a request to the upper layers to emulate the operation:
>
> So would a patch like this be welcome and clear this up?
>
> diff --git a/include/linux/errno.h b/include/linux/errno.h
> index d90b80f..d33ae4b 100644
> --- a/include/linux/errno.h
> +++ b/include/linux/errno.h
> @@ -9,7 +9,7 @@
> #define ERESTARTSYS 512
> #define ERESTARTNOINTR 513
> #define ERESTARTNOHAND 514 /* restart if no handler.. */
> -#define ENOIOCTLCMD 515 /* No ioctl command */
> +#define ENOIOCTLCMD 515 /* No ioctl command, upper layer please emulate or pass ENOTTY to user space */
> #define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
>
> /* Defined for the NFSv3 protocol */
>
Sure, if people feel it's necessary.
-hpa