From: Petr Vorel <pvorel@suse.cz>
To: Wei Gao <wegao@suse.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v1] msync04: Check disk content if dirty bit check failed
Date: Tue, 28 May 2024 01:18:07 +0200 [thread overview]
Message-ID: <20240527231807.GB375669@pevik> (raw)
In-Reply-To: <20240522124754.9599-1-wegao@suse.com>
Hi Wei,
> msync04 test is inherently racy and nothing guarantees that the page
> is not written out before get_dirty_page() manages to read the page state.
> Hence the test should be reworked to verify the page contents is on disk
> when it finds dirty bit isn't set anymore...
It's nice habit to add Jan's credit :)
He did it [1], thus one would add:
Suggested-by: Jan Kara <jack@suse.cz>
+ Add a ticket:
Implements: https://github.com/linux-test-project/ltp/issues/1157
[1] https://bugzilla.suse.com/show_bug.cgi?id=1224201#c13
[2] https://lore.kernel.org/ltp/20220125121746.wrs4254pfs2mwexb@quack3.lan/
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
> testcases/kernel/syscalls/msync/msync04.c | 34 ++++++++++++++---------
> 1 file changed, 21 insertions(+), 13 deletions(-)
> diff --git a/testcases/kernel/syscalls/msync/msync04.c b/testcases/kernel/syscalls/msync/msync04.c
> index 72ddc27a4..c296c8b20 100644
> --- a/testcases/kernel/syscalls/msync/msync04.c
> +++ b/testcases/kernel/syscalls/msync/msync04.c
> @@ -46,6 +46,7 @@ uint64_t get_dirty_bit(void *data)
> static void test_msync(void)
> {
> uint64_t dirty;
While at it, could you please remove dirty variable and use get_dirty_bit(...)
directly?
> + char buffer[20];
> test_fd = SAFE_OPEN("msync04/testfile", O_CREAT | O_TRUNC | O_RDWR,
> 0644);
> @@ -56,20 +57,27 @@ static void test_msync(void)
> mmaped_area[8] = 'B';
> dirty = get_dirty_bit(mmaped_area);
> if (!dirty) {
if (!get_dirty_bit(mmaped_area)) {
> - tst_res(TFAIL, "Expected dirty bit to be set after writing to"
> - " mmap()-ed area");
> - goto clean;
> - }
> - if (msync(mmaped_area, pagesize, MS_SYNC) < 0) {
> - tst_res(TFAIL | TERRNO, "msync() failed");
> - goto clean;
> + tst_res(TINFO, "Not see dirty bit so we check content of file instead");
> + test_fd = SAFE_OPEN("msync04/testfile", O_RDONLY);
> + SAFE_READ(0, test_fd, buffer, 9);
> + if (buffer[8] == 'B')
> + tst_res(TCONF, "write file ok but msync couldn't be tested"
> + " because the storage was written to too quickly");
> + else
> + tst_res(TFAIL, "write file failed");
> + } else {
> + if (msync(mmaped_area, pagesize, MS_SYNC) < 0) {
> + tst_res(TFAIL | TERRNO, "msync() failed");
I know you copy old code, but it would deserve to fix: -1 is failure, anything
different than 0 or -1 is invalid value. And you get this for free if you use
TST_EXP_PASS_SILENT().
> + goto clean;
nit: Having if and else part in it's own functions (verify_mmaped(),
verify_dirty() would allow to get rid of goto and produced slightly nicer code
(less indentation => less split lines):
if (!get_dirty_bit(mmaped_area))
verify_mmaped();
else
verify_dirty();
SAFE_MUNMAP(mmaped_area, pagesize);
mmaped_area = NULL;
> + }
> + dirty = get_dirty_bit(mmaped_area);
> + if (dirty)
if (get_dirty_bit(mmaped_area)) {
> + tst_res(TFAIL, "msync() failed to write dirty page despite"
> + " succeeding");
I would keep this string separate
> + else
> + tst_res(TPASS, "msync() working correctly");
> +
> }
> - dirty = get_dirty_bit(mmaped_area);
> - if (dirty)
> - tst_res(TFAIL, "msync() failed to write dirty page despite"
> - " succeeding");
> - else
> - tst_res(TPASS, "msync() working correctly");
> clean:
> SAFE_MUNMAP(mmaped_area, pagesize);
--
Mailing list info: https://lists.linux.it/listinfo/ltp
prev parent reply other threads:[~2024-05-27 23:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-22 12:47 [LTP] [PATCH v1] msync04: Check disk content if dirty bit check failed Wei Gao via ltp
2024-05-27 23:16 ` Petr Vorel
2024-05-28 9:50 ` Jan Kara
2024-05-28 12:39 ` Petr Vorel
2024-05-29 6:03 ` Wei Gao via ltp
2024-05-27 23:18 ` Petr Vorel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240527231807.GB375669@pevik \
--to=pvorel@suse.cz \
--cc=ltp@lists.linux.it \
--cc=wegao@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.