2006-05-16 23:30:37

by Alessandro Zummo

[permalink] [raw]
Subject: [PATCH] rtc subsystem, use ENOIOCTLCMD where appropriate



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;
}


2006-05-17 21:22:43

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, use ENOIOCTLCMD where appropriate

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

2006-05-17 21:27:47

by Alessandro Zummo

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, use ENOIOCTLCMD where appropriate

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

2006-05-18 20:30:26

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, use ENOIOCTLCMD where appropriate

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

2006-05-18 22:35:36

by Ingo Oeser

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, use ENOIOCTLCMD where appropriate

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

2006-05-18 22:38:52

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, use ENOIOCTLCMD where appropriate

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