* [LTP] [PATCH] performing test on loop device if noatime or relatime specified
@ 2015-05-04 6:34 Han Pingtian
2015-05-04 11:53 ` Cyril Hrubis
0 siblings, 1 reply; 12+ messages in thread
From: Han Pingtian @ 2015-05-04 6:34 UTC (permalink / raw)
To: ltp-list
Hi,
The noatime test of open12 fails on a distribution which doesn't
use tmpfs for /tmp. I have composed a patch to fix it. Please have a
look, thanks.
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 <hanpt@linux.vnet.ibm.com>
---
testcases/kernel/syscalls/open/open12.c | 41 +++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)
diff --git a/testcases/kernel/syscalls/open/open12.c b/testcases/kernel/syscalls/open/open12.c
index 54ddfe0..f9be35b 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>
@@ -34,8 +35,16 @@
#define TEST_FILE "test_file"
#define LARGE_FILE "large_file"
+#define DIR_MODE 0755
+#define MNTPOINT "mntpoint"
+
char *TCID = "open12";
+static const char *device;
+static const char *fs_type;
+static unsigned int mount_flag = 0;
+static unsigned int cd_flag = 0;
+
static void setup(void);
static void cleanup(void);
static void test_append(void);
@@ -114,10 +123,21 @@ 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;
+
+ 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_MKDIR(cleanup, MNTPOINT, DIR_MODE);
+ SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, MS_STRICTATIME, NULL);
+ mount_flag = 1;
+ SAFE_FILE_PRINTF(cleanup, MNTPOINT"/"TEST_FILE, TEST_FILE);
+ SAFE_CHDIR(cleanup, MNTPOINT);
+ cd_flag = 1;
}
SAFE_STAT(cleanup, TEST_FILE, &old_stat);
@@ -221,5 +241,18 @@ static void test_largefile(void)
static void cleanup(void)
{
+ if (cd_flag) {
+ char *tmp_dir = tst_get_tmpdir();
+ SAFE_CHDIR(NULL, tmp_dir);
+ free(tmp_dir);
+ }
+
+ if (mount_flag && tst_umount(MNTPOINT) == -1) {
+ tst_brkm(TBROK | 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
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [LTP] [PATCH] performing test on loop device if noatime or relatime specified
2015-05-04 6:34 [LTP] [PATCH] performing test on loop device if noatime or relatime specified Han Pingtian
@ 2015-05-04 11:53 ` Cyril Hrubis
2015-05-06 13:55 ` Han Pingtian
0 siblings, 1 reply; 12+ messages in thread
From: Cyril Hrubis @ 2015-05-04 11:53 UTC (permalink / raw)
To: ltp-list
Hi!
> diff --git a/testcases/kernel/syscalls/open/open12.c b/testcases/kernel/syscalls/open/open12.c
> index 54ddfe0..f9be35b 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>
> @@ -34,8 +35,16 @@
> #define TEST_FILE "test_file"
> #define LARGE_FILE "large_file"
>
> +#define DIR_MODE 0755
> +#define MNTPOINT "mntpoint"
> +
> char *TCID = "open12";
>
> +static const char *device;
> +static const char *fs_type;
> +static unsigned int mount_flag = 0;
> +static unsigned int cd_flag = 0;
> +
> static void setup(void);
> static void cleanup(void);
> static void test_append(void);
> @@ -114,10 +123,21 @@ 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;
> +
> + 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_MKDIR(cleanup, MNTPOINT, DIR_MODE);
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.
> + SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, MS_STRICTATIME, NULL);
> + mount_flag = 1;
> + SAFE_FILE_PRINTF(cleanup, MNTPOINT"/"TEST_FILE, TEST_FILE);
> + SAFE_CHDIR(cleanup, MNTPOINT);
> + cd_flag = 1;
> }
>
> SAFE_STAT(cleanup, TEST_FILE, &old_stat);
> @@ -221,5 +241,18 @@ static void test_largefile(void)
>
> static void cleanup(void)
> {
> + if (cd_flag) {
> + char *tmp_dir = tst_get_tmpdir();
> + SAFE_CHDIR(NULL, tmp_dir);
> + free(tmp_dir);
> + }
> +
> + if (mount_flag && tst_umount(MNTPOINT) == -1) {
> + tst_brkm(TBROK | TERRNO, NULL, "umount(2) failed");
This should rather be tst_resm(TWARN | TERRNO, ...) so that we at least
attempt to continue the cleanup.
> + }
> +
> + if (device)
> + tst_release_device(NULL, device);
> +
> tst_rmdir();
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [LTP] [PATCH] performing test on loop device if noatime or relatime specified
2015-05-04 11:53 ` Cyril Hrubis
@ 2015-05-06 13:55 ` Han Pingtian
2015-05-07 12:48 ` Cyril Hrubis
2015-05-12 12:50 ` Cui Bixuan
0 siblings, 2 replies; 12+ messages in thread
From: Han Pingtian @ 2015-05-06 13:55 UTC (permalink / raw)
To: ltp-list
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 <hanpt@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 <hanpt@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
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [LTP] [PATCH] performing test on loop device if noatime or relatime specified
2015-05-06 13:55 ` Han Pingtian
@ 2015-05-07 12:48 ` Cyril Hrubis
2015-05-08 1:41 ` Han Pingtian
2015-05-12 12:50 ` Cui Bixuan
1 sibling, 1 reply; 12+ messages in thread
From: Cyril Hrubis @ 2015-05-07 12:48 UTC (permalink / raw)
To: ltp-list
Hi!
> Thanks. I have revised the patch according to your suggestions.
Pushed with following modifications, thanks.
* The device preparation must be done only once in setup()
otherwise the testcase fails with -i 2
* The testcase was previously working fine when executed as
non-root user, I've made some changes so that this continues
to work as well
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH] performing test on loop device if noatime or relatime specified
2015-05-07 12:48 ` Cyril Hrubis
@ 2015-05-08 1:41 ` Han Pingtian
0 siblings, 0 replies; 12+ messages in thread
From: Han Pingtian @ 2015-05-08 1:41 UTC (permalink / raw)
To: ltp-list
On Thu, May 07, 2015 at 02:48:31PM +0200, Cyril Hrubis wrote:
> Hi!
> > Thanks. I have revised the patch according to your suggestions.
>
> Pushed with following modifications, thanks.
>
> * The device preparation must be done only once in setup()
> otherwise the testcase fails with -i 2
>
> * The testcase was previously working fine when executed as
> non-root user, I've made some changes so that this continues
> to work as well
>
Thanks!
------------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH] performing test on loop device if noatime or relatime specified
2015-05-06 13:55 ` Han Pingtian
2015-05-07 12:48 ` Cyril Hrubis
@ 2015-05-12 12:50 ` Cui Bixuan
2015-05-12 13:48 ` Cyril Hrubis
1 sibling, 1 reply; 12+ messages in thread
From: Cui Bixuan @ 2015-05-12 12:50 UTC (permalink / raw)
To: ltp-list, hanpt
> +
> + SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, MS_STRICTATIME, NULL);
> + mount_flag = 1;
> + SAFE_FILE_PRINTF(cleanup, TEST_FILE, TEST_FILE);
> }
Hi,
I run the LTP today:
.configure
make
then compile error:
gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -W -g -O2 -Wold-style-definition -D_FORTIFY_SOURCE=2 -I/home/cuibixuan/home/git/ltp/ltp/testcases/kernel/include -I../../../../include -I../../../../include -L../../../../lib open12.c -lltp -o open12
open12.c: In function ‘setup’:
open12.c:103: error: ‘MS_STRICTATIME’ undeclared (first use in this function)
open12.c:103: error: (Each undeclared identifier is reported only once
open12.c:103: error: for each function it appears in.)
make[4]: *** [open12] Error 1
make[4]: Leaving directory `/home/cuibixuan/home/git/ltp/ltp/testcases/kernel/syscalls/open'
Do 'man mount' and can not find 'MS_STRICTATIME'.
I get from man-pages of linux:
MS_STRICTATIME (since Linux 2.6.30)
Always update the last access time (atime) when files on this
filesystem are accessed. (This was the default behavior
before Linux 2.6.30.) Specifying this flag overrides the
effect of setting the MS_NOATIME and MS_RELATIME flags.
If not support 'MS_STRICTATIME'?
My system is SUSE11-SP2, linux 3.0.13, and gcc version 4.3.4.
------------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [LTP] [PATCH] performing test on loop device if noatime or relatime specified
2015-05-12 12:50 ` Cui Bixuan
@ 2015-05-12 13:48 ` Cyril Hrubis
[not found] ` <55530639.2070806@huawei.com>
[not found] ` <55530742.3030707@huawei.com>
0 siblings, 2 replies; 12+ messages in thread
From: Cyril Hrubis @ 2015-05-12 13:48 UTC (permalink / raw)
To: Cui Bixuan; +Cc: ltp-list
Hi!
> then compile error:
> gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -W -g -O2 -Wold-style-definition -D_FORTIFY_SOURCE=2 -I/home/cuibixuan/home/git/ltp/ltp/testcases/kernel/include -I../../../../include -I../../../../include -L../../../../lib open12.c -lltp -o open12
> open12.c: In function ?setup?:
> open12.c:103: error: ?MS_STRICTATIME? undeclared (first use in this function)
> open12.c:103: error: (Each undeclared identifier is reported only once
> open12.c:103: error: for each function it appears in.)
> make[4]: *** [open12] Error 1
> make[4]: Leaving directory `/home/cuibixuan/home/git/ltp/ltp/testcases/kernel/syscalls/open'
>
> Do 'man mount' and can not find 'MS_STRICTATIME'.
>
> I get from man-pages of linux:
> MS_STRICTATIME (since Linux 2.6.30)
> Always update the last access time (atime) when files on this
> filesystem are accessed. (This was the default behavior
> before Linux 2.6.30.) Specifying this flag overrides the
> effect of setting the MS_NOATIME and MS_RELATIME flags.
>
> If not support 'MS_STRICTATIME'?
> My system is SUSE11-SP2, linux 3.0.13, and gcc version 4.3.4.
Solution to compilation failures is to add fallback definition into
ltp/include/lapi/mount.h (have a look at ltp/include/lapi/fcntl.h) and
include it in the testcase source. That would make the testcase compile,
but it may still fail when executed. To fix the execution we would need
to do a runtime check if the kernel supports this flag, I guess that we
would need to pass it only on newer kernels (we use tst_kvercmp() for
that).
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2015-05-27 14:21 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-04 6:34 [LTP] [PATCH] performing test on loop device if noatime or relatime specified Han Pingtian
2015-05-04 11:53 ` Cyril Hrubis
2015-05-06 13:55 ` Han Pingtian
2015-05-07 12:48 ` Cyril Hrubis
2015-05-08 1:41 ` Han Pingtian
2015-05-12 12:50 ` Cui Bixuan
2015-05-12 13:48 ` Cyril Hrubis
[not found] ` <55530639.2070806@huawei.com>
2015-05-13 8:14 ` Cyril Hrubis
[not found] ` <55559C6A.9090001@huawei.com>
2015-05-18 11:56 ` [LTP] [PATCH] open/open12: compile error Cyril Hrubis
[not found] ` <55530742.3030707@huawei.com>
2015-05-13 9:03 ` [LTP] [PATCH] open/open12: Check the kernel version for 'MS_STRICTATIME' Cyril Hrubis
[not found] ` <5555A746.4080006@huawei.com>
2015-05-18 11:52 ` Cyril Hrubis
[not found] ` <5559DDD9.4090807@huawei.com>
2015-05-27 14:20 ` [LTP] [PATCH 2/2 v2] " Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.