Issue description:
-------------------
Kernel Version : 3.7-rc2
System call : ioctl
LTP Testcase : ioctl01
LTP Version : 20120903
Platform : x86_64 ( HP 8200 PC )
Testcase Description : Testcase to check the errnos set by the ioctl(2) system
call.
Previous kernel version in which testcase passed : 3.2.9

Executing log:
-------------------------
[root@linux-qf4g]-[/tmp/ltp/ltp/testcases/bin]
(0)# ./ioctl01 -D /dev/tty
ioctl01     1  TPASS  :  failed as expected: TEST_ERRNO=EBADF(9): Bad file
descriptor
ioctl01     2  TPASS  :  failed as expected: TEST_ERRNO=EFAULT(14): Bad address
ioctl01     3  TFAIL  :  failed unexpectedly; expected 22 - Invalid argument:
TEST_ERRNO=ENOTTY(25): Inappropriate ioctl for device
ioctl01     4  TPASS  :  failed as expected: TEST_ERRNO=ENOTTY(25):
Inappropriate ioctl for device
ioctl01     5  TPASS  :  failed as expected: TEST_ERRNO=EFAULT(14): Bad address
-------------------------
The return value of the code is expected to be 22 but 24 is returned and
hence the LTP test failed.

From v3.2.9, kernel has changed the return value for bad command.
The patch commit no:07d106d0a33d6063d2061305903deb02489eba20

Below is part of the patch:
----------------------------------

diff --git a/fs/ioctl.c b/fs/ioctl.c

index 1d9b9fc..066836e 100644
--- a/fs/ioctl.c
+++ b/fs/ioctl.c

@@ -42,7 +42,7 @@ static long vfs_ioctl(struct file *filp, unsigned

 int cmd,

        error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
        if (error == -ENOIOCTLCMD)
-               error = -EINVAL;
+               error = -ENOTTY;


diff --git a/block/ioctl.c b/block/ioctl.c
index ca939fc..d510c2a 100644
--- a/block/ioctl.c
+++ b/block/ioctl.c
@@ -180,6 +180,26 @@ int __blkdev_driver_ioctl(struct block_device *bdev, 
fmode_t mode,
 EXPORT_SYMBOL_GPL(__blkdev_driver_ioctl);

 /*
+ * Is it an unrecognized ioctl? The correct returns are either
+ * ENOTTY (final) or ENOIOCTLCMD ("I don't know this one, try a
+ * fallback"). ENOIOCTLCMD gets turned into ENOTTY by the ioctl
+ * code before returning.
+ *
+ * Confused drivers sometimes return EINVAL, which is wrong. It
+ * means "I understood the ioctl command, but the parameters to
+ * it were wrong".
+ *
+ * We should aim to just fix the broken drivers, the EINVAL case
+ * should go away.
+ */

---------------------------------


We can see that kernel has modified the return value of bad command from EINVAL
to ENOTTY. So I think we should update the ltp code to cope with the latest
kernel.




Jack
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to