[LTP] [PATCH v3] fcntl/fcntl32.c: add F_SETLEASE and F_WRLCK argument test
Jan Stancek
jstancek@redhat.com
Thu Sep 17 10:03:27 CEST 2015
----- Original Message -----
> From: "Guangwen Feng" <fenggw-fnst@cn.fujitsu.com>
> To: ltp@lists.linux.it
> Sent: Tuesday, 15 September, 2015 10:55:39 AM
> Subject: [LTP] [PATCH v3] 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.
>
> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
Looks good to me.
Reviewed-by: Jan Stancek <jstancek@redhat.com>
> ---
> 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
>
> diff --git a/runtest/ltplite b/runtest/ltplite
> index ab6424c..e3ae8cf 100644
> --- a/runtest/ltplite
> +++ b/runtest/ltplite
> @@ -225,6 +225,7 @@ fcntl26 fcntl26
> fcntl29 fcntl29
> fcntl30 fcntl30
> fcntl31 fcntl31
> +fcntl32 fcntl32
>
> fdatasync01 fdatasync01
> fdatasync02 fdatasync02
> diff --git a/runtest/stress.part3 b/runtest/stress.part3
> index ab9af3c..ca8b70c 100644
> --- a/runtest/stress.part3
> +++ b/runtest/stress.part3
> @@ -164,6 +164,7 @@ fcntl26 fcntl26
> fcntl29 fcntl29
> fcntl30 fcntl30
> fcntl31 fcntl31
> +fcntl32 fcntl32
>
> fdatasync01 fdatasync01
> fdatasync02 fdatasync02
> diff --git a/runtest/syscalls b/runtest/syscalls
> index ee2627f..a641bcd 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -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
> diff --git a/testcases/kernel/syscalls/.gitignore
> b/testcases/kernel/syscalls/.gitignore
> index 18c0ad6..2b288e0 100644
> --- a/testcases/kernel/syscalls/.gitignore
> +++ b/testcases/kernel/syscalls/.gitignore
> @@ -221,6 +221,8 @@
> /fcntl/fcntl30_64
> /fcntl/fcntl31
> /fcntl/fcntl31_64
> +/fcntl/fcntl32
> +/fcntl/fcntl32_64
> /fdatasync/fdatasync01
> /fdatasync/fdatasync02
> /flock/flock01
> diff --git a/testcases/kernel/syscalls/fcntl/fcntl32.c
> b/testcases/kernel/syscalls/fcntl/fcntl32.c
> new file mode 100644
> index 0000000..05d963e
> --- /dev/null
> +++ b/testcases/kernel/syscalls/fcntl/fcntl32.c
> @@ -0,0 +1,137 @@
> +/*
> + * Copyright (c) 2015 Fujitsu Ltd.
> + * Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> + *
> + * 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
>
More information about the Ltp
mailing list