On Mon, May 04, 2015 at 01:53:26PM +0200, Cyril Hrubis wrote: > What about creating a test directory in test temporary directory > unconditionally and change the TEST_FILE to point to a file in it? That > way we can just mount the loop device over the directory if needed and > avoid the ugly chdir here and in the cleanup. > > This should rather be tst_resm(TWARN | TERRNO, ...) so that we at least > attempt to continue the cleanup. >
Thanks. I have revised the patch according to your suggestions. >From 1cdaff6a5658a544f0968ec3e336ffff191ebc30 Mon Sep 17 00:00:00 2001 From: Han Pingtian <ha...@linux.vnet.ibm.com> Date: Mon, 4 May 2015 13:44:51 +0800 Subject: [PATCH] performing test on loop device if noatime or relatime specified After 2.6.30, kernel specifies relatime option by default. If so then try to mount a loop device using strictatime option to do the noatime test. Signed-off-by: Han Pingtian <ha...@linux.vnet.ibm.com> --- testcases/kernel/syscalls/open/open12.c | 40 ++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/testcases/kernel/syscalls/open/open12.c b/testcases/kernel/syscalls/open/open12.c index 54ddfe0..fdc81bb 100644 --- a/testcases/kernel/syscalls/open/open12.c +++ b/testcases/kernel/syscalls/open/open12.c @@ -24,6 +24,7 @@ #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> +#include <sys/mount.h> #include <unistd.h> #include <mntent.h> #include <errno.h> @@ -31,11 +32,17 @@ #include "safe_macros.h" #include "lapi/fcntl.h" -#define TEST_FILE "test_file" +#define MNTPOINT "mntpoint" +#define TEST_FILE MNTPOINT"/test_file" #define LARGE_FILE "large_file" +#define DIR_MODE 0755 + char *TCID = "open12"; +static const char *device; +static unsigned int mount_flag = 0; + static void setup(void); static void cleanup(void); static void test_append(void); @@ -75,6 +82,8 @@ static void setup(void) tst_tmpdir(); + SAFE_MKDIR(cleanup, MNTPOINT, DIR_MODE); + SAFE_FILE_PRINTF(cleanup, TEST_FILE, TEST_FILE); } @@ -114,10 +123,18 @@ static void test_noatime(void) } if (tst_path_has_mnt_flags(cleanup, NULL, flags)) { - tst_resm(TCONF, - "test O_NOATIME flag for open needs filesystems which " - "is mounted without noatime and relatime"); - return; + + const char *fs_type = tst_dev_fs_type(); + device = tst_acquire_device(cleanup); + + if (!device) + tst_brkm(TCONF, cleanup, "Failed to obtain block device"); + + tst_mkfs(cleanup, device, fs_type, NULL); + + SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, MS_STRICTATIME, NULL); + mount_flag = 1; + SAFE_FILE_PRINTF(cleanup, TEST_FILE, TEST_FILE); } SAFE_STAT(cleanup, TEST_FILE, &old_stat); @@ -138,6 +155,13 @@ static void test_noatime(void) tst_resm(TPASS, "test O_NOATIME for open success"); else tst_resm(TFAIL, "test O_NOATIME for open failed"); + + if (mount_flag) { + mount_flag = 0; + + if (tst_umount(MNTPOINT) == -1) + tst_brkm(TBROK | TERRNO, cleanup, "umount(2) failed"); + } } static void test_cloexec(void) @@ -221,5 +245,11 @@ static void test_largefile(void) static void cleanup(void) { + if (mount_flag && tst_umount(MNTPOINT) == -1) + tst_brkm(TWARN | TERRNO, NULL, "umount(2) failed"); + + if (device) + tst_release_device(NULL, device); + tst_rmdir(); } -- 1.9.3 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list