From: DAN LI <li...@cn...> - 2013-07-02 06:24:37
|
Additional test for features MS_NOATIME. Signed-off-by: DAN LI <li...@cn...> --- testcases/kernel/syscalls/mount/mount03.c | 46 +++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/testcases/kernel/syscalls/mount/mount03.c b/testcases/kernel/syscalls/mount/mount03.c index 8b2d3e4..cb99887 100644 --- a/testcases/kernel/syscalls/mount/mount03.c +++ b/testcases/kernel/syscalls/mount/mount03.c @@ -20,7 +20,7 @@ * * TEST TITLE : Test for checking mount(2) flags * - * TEST CASE TOTAL : 6 + * TEST CASE TOTAL : 7 * * AUTHOR : Nirmala Devi Dhanasekar <nir...@wi...> * @@ -35,6 +35,7 @@ * 4) MS_SYNCHRONOUS - writes are synced at once. * 5) MS_REMOUNT - alter flags of a mounted FS. * 6) MS_NOSUID - ignore suid and sgid bits. + * 7) MS_NOATIME - do not update access times. * * Setup: * Setup signal handling. @@ -83,7 +84,7 @@ static int test_rwflag(int, int); static int setup_uid(void); char *TCID = "mount03"; -int TST_TOTAL = 6; +int TST_TOTAL = 7; #define EXEC_COMMAND "cp" #define DEFAULT_FSTYPE "ext2" @@ -115,6 +116,7 @@ long rwflags[] = { MS_SYNCHRONOUS, MS_RDONLY, MS_NOSUID, + MS_NOATIME, }; static option_t options[] = { @@ -208,6 +210,8 @@ int test_rwflag(int i, int cnt) { int ret, fd, pid, status; char nobody_uid[] = "nobody"; + time_t atime; + struct stat file_stat; struct passwd *ltpuser; switch (i) { @@ -370,6 +374,44 @@ int test_rwflag(int i, int cnt) return 1; } } + case 6: + /* Validate MS_NOATIME flag of mount call */ + + snprintf(file, PATH_MAX, "%satime", path_name); + fd = open(file, O_CREAT | O_RDWR, S_IRWXU); + if (fd == -1) { + tst_resm(TWARN | TERRNO, "opening %s failed", file); + return 1; + } + + if (write(fd, "TEST_MS_NOATIME", 15) != 15) { + tst_resm(TWARN | TERRNO, "write %s failed", file); + return 1; + } + + if (fstat(fd, &file_stat) == -1) { + tst_resm(TWARN | TERRNO, "stat %s failed #1", file); + return 1; + } + + atime = file_stat.st_atime; + + if (read(fd, NULL, 20) == -1) { + tst_resm(TWARN | TERRNO, "read %s failed", file); + return 1; + } + + if (fstat(fd, &file_stat) == -1) { + tst_resm(TWARN | TERRNO, "stat %s failed #2", file); + return 1; + } + close(fd); + + if (file_stat.st_atime != atime) { + tst_resm(TWARN, "access time is updated"); + return 1; + } + return 0; } return 0; } -- 1.8.1 |