fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v3 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
Add new testcase to verify that a write lease may be placed on a file only if there are no other open file descriptors for the file.
--- runtest/ltplite | 1 + runtest/stress.part3 | 1 + runtest/syscalls | 2 + testcases/kernel/syscalls/.gitignore | 2 + testcases/kernel/syscalls/fcntl/fcntl32.c | 137 ++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100644 testcases/kernel/syscalls/fcntl/fcntl32.c
runtest/ltplite +1 -0
@@ -225,6 +225,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02
runtest/stress.part3 +1 -0
@@ -164,6 +164,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02
runtest/syscalls +2 -0
@@ -258,6 +258,8 @@ fcntl30 fcntl30 fcntl30_64 fcntl30_64 fcntl31 fcntl31 fcntl31_64 fcntl31_64 +fcntl32 fcntl32 +fcntl32_64 fcntl32_64 fdatasync01 fdatasync01 fdatasync02 fdatasync02
testcases/kernel/syscalls/.gitignore +2 -0
@@ -221,6 +221,8 @@ /fcntl/fcntl30_64 /fcntl/fcntl31 /fcntl/fcntl31_64 +/fcntl/fcntl32 +/fcntl/fcntl32_64 /fdatasync/fdatasync01 /fdatasync/fdatasync02 /flock/flock01
testcases/kernel/syscalls/fcntl/fcntl32.c new file +137 -0
137 lines not on this page · raw message
Signature · 1 line
1.8.4.2
PATCH v3 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
----- Original Message -----
Quoted 10 lines
From: "Guangwen Feng" <[email protected]>
To: [email protected]
Sent: Tuesday, 15 September, 2015 10:55:39 AM
Subject: [LTP] [PATCH v3]fcntl/fcntl32.c: addF_SETLEASEandF_WRLCKargument testAdd new testcase to verify that a write lease may be placed on a file only if there are no other open file descriptors for the file.
Signed-off-by Guangwen Feng <[email protected]>
Looks good to me.
Quoted 212 lines
--- runtest/ltplite | 1 + runtest/stress.part3 | 1 + runtest/syscalls | 2 + testcases/kernel/syscalls/.gitignore | 2 + testcases/kernel/syscalls/fcntl/fcntl32.c | 137 ++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100644 testcases/kernel/syscalls/fcntl/fcntl32.cruntest/ltplite +1
-0@@ -225,6 +225,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02runtest/stress.part3 +1
-0@@ -164,6 +164,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02runtest/syscalls +2
-0@@ -258,6 +258,8 @@ fcntl30 fcntl30 fcntl30_64 fcntl30_64 fcntl31 fcntl31 fcntl31_64 fcntl31_64 +fcntl32 fcntl32 +fcntl32_64 fcntl32_64 fdatasync01 fdatasync01 fdatasync02 fdatasync02testcases/kernel/syscalls/.gitignore +2
-0@@ -221,6 +221,8 @@ /fcntl/fcntl30_64 /fcntl/fcntl31 /fcntl/fcntl31_64 +/fcntl/fcntl32 +/fcntl/fcntl32_64 /fdatasync/fdatasync01 /fdatasync/fdatasync02 /flock/flock01testcases/kernel/syscalls/fcntl/fcntl32.c new file +137
-1@@ -0,0 +1,137 @@ +/* +* Copyright (c) 2015 Fujitsu Ltd. +* Author: Guangwen Feng <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it would be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* +* You should have received a copy of the GNU General Public License +* alone with this program. +*/ + +/* +* DESCRIPTION +* Basic test for fcntl(2) using F_SETLEASE & F_WRLCK argument. +* "A write lease may be placed on a file only if there are +* no other open file descriptors for the file." +*/ + +#include <errno.h> + +#include "test.h" +#include "safe_macros.h" +#include "tst_fs_type.h" + +static void setup (void ); +static void verify_fcntl (int ); +static void cleanup (void ); + +#define FILE_MODE (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID) + +static int fd1; +static int fd2; + +static struct test_case_t { +int fd1_flag; +int fd2_flag; +} test_cases[] = { + {O_RDONLY ,O_RDONLY }, + {O_RDONLY ,O_WRONLY }, + {O_RDONLY ,O_RDWR }, + {O_WRONLY ,O_RDONLY }, + {O_WRONLY ,O_WRONLY }, + {O_WRONLY ,O_RDWR }, + {O_RDWR ,O_RDONLY }, + {O_RDWR ,O_WRONLY }, + {O_RDWR ,O_RDWR }, +}; + +char *TCID ="fcntl32" ; +int TST_TOTAL =ARRAY_SIZE (test_cases); + +int main (int ac,char **av) +{ +int lc; +int tc; +long type; + +tst_parse_opts (ac, av,NULL ,NULL ); + +setup (); + +switch ((type =tst_fs_type (cleanup,"." ))) { +case TST_NFS_MAGIC : +case TST_RAMFS_MAGIC : +case TST_TMPFS_MAGIC : +tst_brkm (TCONF , cleanup,"%s filesystem does not support " +"fcntl(2)'s F_SETLEASE operation" , +tst_fs_type_name (type)); +default : +break ; + } + +for (lc =0 ;TEST_LOOPING (lc); lc++) { + tst_count =0 ; + +for (tc =0 ; tc <TST_TOTAL ; tc++) +verify_fcntl (tc); + } + +cleanup (); +tst_exit (); +} + +static void setup (void ) +{ +tst_sig (NOFORK ,DEF_HANDLER , cleanup); +TEST_PAUSE ; + +tst_tmpdir (); + +SAFE_TOUCH (cleanup,"file" ,FILE_MODE ,NULL ); +} + +static void verify_fcntl (int i) +{ + fd1 =SAFE_OPEN (cleanup,"file" , test_cases[i].fd1_flag); + fd2 =SAFE_OPEN (cleanup,"file" , test_cases[i].fd2_flag); + +TEST (fcntl (fd1,F_SETLEASE ,F_WRLCK )); + +if (TEST_RETURN ==0 ) { +tst_resm (TFAIL ,"fcntl(F_SETLEASE, F_WRLCK) " +"succeeded unexpectedly" ); + }else { +if (TEST_ERRNO ==EBUSY ||TEST_ERRNO ==EAGAIN ) { +tst_resm (TPASS |TTERRNO , +"fcntl(F_SETLEASE, F_WRLCK) " +"failed as expected" ); + }else { +tst_resm (TFAIL |TTERRNO , +"fcntl(F_SETLEASE, F_WRLCK) " +"failed unexpectedly, " +"expected errno is EBUSY or EAGAIN" ); + } + } + +SAFE_CLOSE (cleanup, fd1); + fd1 =0 ; +SAFE_CLOSE (cleanup, fd2); + fd2 =0 ; +} + +static void cleanup (void ) +{ +if (fd1 >0 &&close (fd1)) +tst_resm (TWARN |TERRNO ,"Failed to close file" ); + +if (fd2 >0 &&close (fd2)) +tst_resm (TWARN |TERRNO ,"Failed to close file" ); + +tst_rmdir (); +} --1.8.4.2
--
Mailing list info: http://lists.linux.it/listinfo/ltp
PATCH v3 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
In reply to Guangwen FengHi!
Quoted 10 lines
testcases/kernel/syscalls/fcntl/fcntl32.c new file +10
-0+int main (int ac,char **av) +{ +int lc; +int tc; +long type; + +tst_parse_opts (ac, av,NULL ,NULL ); + +setup (); +
testcases/kernel/syscalls/fcntl/fcntl32.c line 76
Quoted 10 lines
testcases/kernel/syscalls/fcntl/fcntl32.c new file +10
-0+switch ((type =tst_fs_type (cleanup,"." ))) { +case TST_NFS_MAGIC : +case TST_RAMFS_MAGIC : +case TST_TMPFS_MAGIC : +tst_brkm (TCONF , cleanup,"%s filesystem does not support " +"fcntl(2)'s F_SETLEASE operation" , +tst_fs_type_name (type)); +default : +break ; + }
Same as the second one. I would preffer figuring out that the fcntl() is unsupported by actually trying to use it.
Otherwise it looks fine.
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH v3 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
Hi!
Thanks for your reply.
Quoted 16 lines · Cyril Hrubis
Hi!
Quoted 15 lines
testcases/kernel/syscalls/fcntl/fcntl32.c new file +15
-0+int main (int ac,char **av) +{ +int lc; +int tc; +long type; + +tst_parse_opts (ac, av,NULL ,NULL ); + +setup (); + +switch ((type =tst_fs_type (cleanup,"." ))) { +case TST_NFS_MAGIC : +case TST_RAMFS_MAGIC : +case TST_TMPFS_MAGIC : + tst_brkm(TCONF, cleanup, "%s filesystem does not support "
Quoted 9 lines
testcases/kernel/syscalls/fcntl/fcntl32.c line 76
Quoted 5 lines
testcases/kernel/syscalls/fcntl/fcntl32.c new file +5
-0+"fcntl(2)'s F_SETLEASE operation" , + tst_fs_type_name(type)); +default : +break ; + }Same as the second one. I would preffer figuring out that the
fcntl()is unsupported by actually trying to use it.
It will return EAGAIN when we actually use it, I don't think it's a reasonable errno, since on ramfs or tmpfs, when opening or creating a new file, the dentry->d_count will get an extra count to be 2 but not 1. Please have a look at the following link:
http://www.gossamer-threads.com/lists/linux/kernel/913113
I feel the expression is not clear, it should be "cannot do fcntl()'s F_SETLEASE operation on %s filesystem"
Quoted 3 lines
Otherwise it looks fine.
PATCH v4 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
Add new testcase to verify that a write lease may be placed on a file only if there are no other open file descriptors for the file.
--- runtest/ltplite | 1 + runtest/stress.part3 | 1 + runtest/syscalls | 2 + testcases/kernel/syscalls/.gitignore | 2 + testcases/kernel/syscalls/fcntl/fcntl32.c | 135 ++++++++++++++++++++++++++++++ 5 files changed, 141 insertions(+) create mode 100644 testcases/kernel/syscalls/fcntl/fcntl32.c
runtest/ltplite +1 -0
@@ -225,6 +225,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02
runtest/stress.part3 +1 -0
@@ -164,6 +164,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02
runtest/syscalls +2 -0
@@ -258,6 +258,8 @@ fcntl30 fcntl30 fcntl30_64 fcntl30_64 fcntl31 fcntl31 fcntl31_64 fcntl31_64 +fcntl32 fcntl32 +fcntl32_64 fcntl32_64 fdatasync01 fdatasync01 fdatasync02 fdatasync02
testcases/kernel/syscalls/.gitignore +2 -0
@@ -221,6 +221,8 @@ /fcntl/fcntl30_64 /fcntl/fcntl31 /fcntl/fcntl31_64 +/fcntl/fcntl32 +/fcntl/fcntl32_64 /fdatasync/fdatasync01 /fdatasync/fdatasync02 /flock/flock01
testcases/kernel/syscalls/fcntl/fcntl32.c new file +135 -0
135 lines not on this page · raw message
Signature · 1 line
1.8.4.2
PATCH v3 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
In reply to Guangwen FengHi!
Quoted 8 lines
Quoted 3 lines
Same as the second one. I would preffer figuring out that the
fcntl()is unsupported by actually trying to use it.It will return EAGAIN when we actually use it, I don't think it's a reasonable errno, since on ramfs or tmpfs, when opening or creating a new file, the
dentry->d_countwill get an extra count to be 2 but not 1. Please have a look at the following link:
http://www.gossamer-threads.com/lists/linux/kernel/913113
Hmm, so the kernel thinks that the file has been opened two times allready and returns EAGAIN when we try the lock. It may be better to just to skip these filesystems as you did then, since it's unlikely that somebody will fix this in kernel.
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH v5 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
Add new testcase to verify that a write lease may be placed on a file only if there are no other open file descriptors for the file.
--- runtest/ltplite | 1 + runtest/stress.part3 | 1 + runtest/syscalls | 2 + testcases/kernel/syscalls/.gitignore | 2 + testcases/kernel/syscalls/fcntl/fcntl32.c | 138 ++++++++++++++++++++++++++++++ 5 files changed, 144 insertions(+) create mode 100644 testcases/kernel/syscalls/fcntl/fcntl32.c
runtest/ltplite +1 -0
@@ -225,6 +225,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02
runtest/stress.part3 +1 -0
@@ -164,6 +164,7 @@ fcntl26 fcntl26 fcntl29 fcntl29 fcntl30 fcntl30 fcntl31 fcntl31 +fcntl32 fcntl32 fdatasync01 fdatasync01 fdatasync02 fdatasync02
runtest/syscalls +2 -0
@@ -258,6 +258,8 @@ fcntl30 fcntl30 fcntl30_64 fcntl30_64 fcntl31 fcntl31 fcntl31_64 fcntl31_64 +fcntl32 fcntl32 +fcntl32_64 fcntl32_64 fdatasync01 fdatasync01 fdatasync02 fdatasync02
testcases/kernel/syscalls/.gitignore +2 -0
@@ -221,6 +221,8 @@ /fcntl/fcntl30_64 /fcntl/fcntl31 /fcntl/fcntl31_64 +/fcntl/fcntl32 +/fcntl/fcntl32_64 /fdatasync/fdatasync01 /fdatasync/fdatasync02 /flock/flock01
testcases/kernel/syscalls/fcntl/fcntl32.c new file +138 -0
138 lines not on this page · raw message
Signature · 1 line
1.8.4.2
PATCH v5 1/1 fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
Hi!
Pushed, thanks.
Signature · 2 lines
Cyril Hrubis [email protected]