Subject: bug#8074: closed (Re: bug#8074: Fix sparse-pipe test on 2.6.26 kernel)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 18 Feb 2011 12:55:02 +0000

Your bug report

#8074: Fix sparse-pipe test on 2.6.26 kernel

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
8074: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8074
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#8074: Fix sparse-pipe test on 2.6.26 kernel
From: Jim Meyering <[email-masked]>
To: "Gilles Espinasse" <[email-masked]>
Cc: Pádraig Brady <[email-masked]>, [email-masked]
Date: Fri, 18 Feb 2011 13:54:22 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Gilles Espinasse wrote:

> ----- Original Message -----
> From: "Pádraig Brady" <[email-masked]>
> To: "Gilles Espinasse" <[email-masked]>
> Cc: "Jim Meyering" <[email-masked]>; <[email-masked]>
> Sent: Friday, February 18, 2011 11:54 AM
> Subject: bug#8074: Fix sparse-pipe test on 2.6.26 kernel
>
>
> ...
>> >
>> > If I add a dd if=/dev/null of=pipe conv=notrunc,fdatasync, test
> reliabily
>> > work too.
>> > So I added that in attached patch.
>>
>> Good testing!
>> Interesting to see that fdatasync flushes the pipe to disk.
>> However it might be more portable/robust to use `wait`
>> rather than that dd command?
>>
>> cheers,
>> Pádraig.
>>
> wait work fine
> Find v2 attached

Thanks to both of you.
That was just a buggy (racy) test, independent of kernel
or distro, so I've adjusted comments accordingly:

>From e6067bcb040f110238bd7cbf9f3781f2e149e0c0 Mon Sep 17 00:00:00 2001
From: Gilles Espinasse <[email-masked]>
Date: Fri, 18 Feb 2011 13:52:21 +0100
Subject: [PATCH] tests: correct racy sparse-to-pipe test

* tests/cp/sparse-to-pipe: Wait for backgrounded "cat" to complete
before comparing the results.
---
 tests/cp/sparse-to-pipe |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/tests/cp/sparse-to-pipe b/tests/cp/sparse-to-pipe
index 4d39458..9bbaafa 100755
--- a/tests/cp/sparse-to-pipe
+++ b/tests/cp/sparse-to-pipe
@@ -25,7 +25,11 @@ mkfifo_or_skip_ pipe
 timeout 10 cat pipe > copy &

 truncate -s1M sparse || framework_failure_
 cp sparse pipe || fail=1
+
+# Ensure that the cat has completed before comparing.
+wait
+
 cmp sparse copy || fail=1

 Exit $fail
--
1.7.4.1.16.g759e8

Subject: Fix sparse-pipe test on 2.6.26 kernel
From: "Gilles Espinasse" <[email-masked]>
To: <[email-masked]>
Cc: Jim Meyering <[email-masked]>
Date: Fri, 18 Feb 2011 09:48:52 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

I send 2 messages to [email-masked] in last 2 weeks but that never
reach the list.
I don't know why as this had work in the past and I receive message from
that same address and was able to reply. Isn't the antispam too good? So I
am a bit forced to try with a direct coreutils message.

Anyway, here is the issue. I compile the same code on different machines and
that's made in a chroot a la LFS. With sparse-fiemap-test.patch, all tests
are ok on three machines but randomly fail on the fourth (all x86 32-bits).
The only difference at this stage between the different machines should be
the running kernel (same glibc-2.11.3 is compiled before coreutils).
This work on ubuntu 2.6.32-26-generic, 2.6.27.57 vanilia kernel, Centos-5.5
2.6.18-194.32.1.el5 but fail in debian v5 2.6.26-2-686

Tested as root with
for i in {1..20}; do make -s check -C tests TESTS=cp/sparse-to-pipe
2>/dev/null;done | grep '1 test'
show this result on the debian machine
1 of 1 test failed
1 of 1 test failed
1 test passed
1 test passed
1 of 1 test failed
1 of 1 test failed
1 of 1 test failed
1 of 1 test failed
1 test passed
1 test passed
1 of 1 test failed
1 test passed
1 test passed
1 of 1 test failed
1 of 1 test failed
1 of 1 test failed
1 test passed
1 test passed
1 of 1 test failed
1 of 1 test failed

FS is ext3
failure is
+ require_sparse_support_
+ test 0 = 0
+ t=sparse.17085
+ dd bs=1 seek=128K of=sparse.17085
++ du -sk sparse.17085
+ set x 0 sparse.17085
+ kb_size=0
+ rm -f sparse.17085
+ test 0 -ge 128
+ mkfifo_or_skip_ pipe
+ test 1 = 1
+ mkfifo pipe
+ timeout 10 cat pipe
+ truncate -s1M sparse
+ cp sparse pipe
+ cmp sparse copy
cmp: EOF on copy
+ fail=1
+ Exit 1

The fun is that if I try to strace the cmp, this change the cmp test to
reliabily work

If I add a dd if=/dev/null of=pipe conv=notrunc,fdatasync, test reliabily
work too.
So I added that in attached patch.

Gilles