diff mbox series

[2/2] syscalls/acct02: Fix failures with nearly full FS

Message ID 20190712141530.22195-3-chrubis@suse.cz
State Accepted
Headers show
Series Fix acct failures on nearly full FS. | expand

Commit Message

Cyril Hrubis July 12, 2019, 2:15 p.m. UTC
While process accounting is running the kernel checks the percentage of
available space on disk. If the accounting is enabled and the free space
drops below 2% the accounting is disabled until we reach at least 4% of
free space. Which especially means that we have to have more than 4% of
free space when we start the accounting because we are starting in
disabled state. And when accounting is disabled the data are dropped
silently instead of being written to the file, which makes this test
fail because we end up with an empty file.

So this patch checks if there is at least 4.1% of free space before we
start the test and exit with TCONF otherwise.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
CC: Christian Amann <camann@suse.com>
---
 testcases/kernel/syscalls/acct/acct02.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Yang Xu July 15, 2019, 8:13 a.m. UTC | #1
> While process accounting is running the kernel checks the percentage of
> available space on disk. If the accounting is enabled and the free space
> drops below 2% the accounting is disabled until we reach at least 4% of
> free space. Which especially means that we have to have more than 4% of
> free space when we start the accounting because we are starting in
> disabled state. And when accounting is disabled the data are dropped
> silently instead of being written to the file, which makes this test
> fail because we end up with an empty file.
>
> So this patch checks if there is at least 4.1% of free space before we
> start the test and exit with TCONF otherwise.
>
> Signed-off-by: Cyril Hrubis<chrubis@suse.cz>
> CC: Christian Amann<camann@suse.com>
> ---
>   testcases/kernel/syscalls/acct/acct02.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
>
> diff --git a/testcases/kernel/syscalls/acct/acct02.c b/testcases/kernel/syscalls/acct/acct02.c
> index f61faf206..6c375d5cb 100644
> --- a/testcases/kernel/syscalls/acct/acct02.c
> +++ b/testcases/kernel/syscalls/acct/acct02.c
> @@ -146,8 +146,20 @@ static void run(void)
>
>   static void setup(void)
>   {
> +	struct statfs buf;
> +
>   	clock_ticks = SAFE_SYSCONF(_SC_CLK_TCK);
>
> +	SAFE_STATFS(".",&buf);
> +
> +	float avail = (100.00 * buf.f_bavail) / buf.f_blocks;

Hi Cyril

  I met the same problem on last week when I ran acct02 on nearly full FS.  Since kernel/acct.c has defined the RESUME(4) and SUSPEND(2) macro,
4.1 is enough.  And I think we can leave a simple comment in here for why the limit is 4.1(even though the commit message has the reason).

Thanks
Yang Xu

> +
> +	if (avail<  4.1) {
> +		tst_brk(TCONF,
> +			"Less than 4.1%% (%.2f) of free space on filesystem",
> +			avail);
> +	}
> +
>   	TEST(acct(NULL));
>   	if (TST_RET == -1)
>   		tst_brk(TBROK | TTERRNO,
Cyril Hrubis July 15, 2019, 11:19 a.m. UTC | #2
Hi!
> I met the same problem on last week when I ran acct02 on nearly full
> FS.  Since kernel/acct.c has defined the RESUME(4) and SUSPEND(2)
> macro, 4.1 is enough.  And I think we can leave a simple comment in
> here for why the limit is 4.1(even though the commit message has the
> reason).

I guess that short comment would help there, if it's OK I will add it
before I push the patch.
Yang Xu July 15, 2019, 11:27 a.m. UTC | #3
> Hi!
>> I met the same problem on last week when I ran acct02 on nearly full
>> FS.  Since kernel/acct.c has defined the RESUME(4) and SUSPEND(2)
>> macro, 4.1 is enough.  And I think we can leave a simple comment in
>> here for why the limit is 4.1(even though the commit message has the
>> reason).
> I guess that short comment would help there, if it's OK I will add it
> before I push the patch.
Hi

Yes, go ahead.
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/acct/acct02.c b/testcases/kernel/syscalls/acct/acct02.c
index f61faf206..6c375d5cb 100644
--- a/testcases/kernel/syscalls/acct/acct02.c
+++ b/testcases/kernel/syscalls/acct/acct02.c
@@ -146,8 +146,20 @@  static void run(void)
 
 static void setup(void)
 {
+	struct statfs buf;
+
 	clock_ticks = SAFE_SYSCONF(_SC_CLK_TCK);
 
+	SAFE_STATFS(".", &buf);
+
+	float avail = (100.00 * buf.f_bavail) / buf.f_blocks;
+
+	if (avail < 4.1) {
+		tst_brk(TCONF,
+			"Less than 4.1%% (%.2f) of free space on filesystem",
+			avail);
+	}
+
 	TEST(acct(NULL));
 	if (TST_RET == -1)
 		tst_brk(TBROK | TTERRNO,