Skip to contentSkip to conversation

du01: create the temp file outside of the working directory

PATCH New Stanislav Kholmanskikh 2 participants 4 messages Jul 25, 2016 – Aug 17, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 du01: create the temp file outside of the working directory

I noticed that with older kernels and with XFS the 'du -B 512' scenario of this test case may fail:

[root@kholmanskikh du01]# uname -r 3.8.13-98.2.2.el6uek.x86_64 [root@kholmanskikh du01]# ls -l
total 10240
drwxr-xr-x 2 root root 24 Jul 25 14:48 testdir
-rw-r--r-- 1 root root 10485760 Jul 25 14:48 testfile [root@kholmanskikh du01]# du -B 512
0 ./testdir
20480 .
[root@kholmanskikh du01]# du -B 512 > temp; cat temp
0 ./testdir
20608 .
[root@kholmanskikh du01]#

This happens because we create 'temp' file in the working directory, i.e. 'temp' may already contain some data at the moment 'du' tries to 'fstat' it.

So let's keep the working directory clean and create any extra files outside of it.

---
 testcases/commands/du/du01.sh |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)
testcases/commands/du/du01.sh +7 -4
index 799099e..df0fea9 100755
@@ -31,6 +31,9 @@ setup()
 	tst_tmpdir
 	TST_CLEANUP=cleanup
 
+	ROD_SILENT mkdir basedir
+	ROD_SILENT cd basedir
+
 	ROD_SILENT dd if=/dev/zero of=testfile bs=1M count=10
 
 	ROD_SILENT mkdir -p testdir
@@ -53,11 +56,11 @@ du_test()
 {
 	local test_return
 
-	$1 > temp 2>&1
+	$1 > ../temp 2>&1
 	test_return=$?
 
 	if [ ${test_return} -ne 0 ]; then
-		grep -q -E "unrecognized option|invalid option" temp
+		grep -q -E "unrecognized option|invalid option" ../temp
 		if [ $? -eq 0 ]; then
 			tst_resm TCONF "'$1' not supported"
 		else
@@ -66,13 +69,13 @@ du_test()
 		return
 	fi
 
-	grep -q $2 temp
+	grep -q $2 ../temp
 	if [ $? -eq 0 ]; then
 		tst_resm TPASS "'$1' passed"
 	else
 		tst_resm TFAIL "'$1' failed"
 		tst_resm TINFO "Looking for '$2' in:"
-		cat temp
+		cat ../temp
 	fi
 }
 
Signature · 1 line
1.7.1
#1 lore raw

PATCH 1/1 du01: create the temp file outside of the working directory

Hi!

Quoted 17 lines

I noticed that with older kernels and with XFS the 'du -B 512' scenario of this test case may fail:

[root@kholmanskikh du01]# uname -r 3.8.13-98.2.2.el6uek.x86_64 [root@kholmanskikh du01]# ls -l
total 10240
drwxr-xr-x 2 root root 24 Jul 25 14:48 testdir
-rw-r--r-- 1 root root 10485760 Jul 25 14:48 testfile [root@kholmanskikh du01]# du -B 512
0 ./testdir
20480 .
[root@kholmanskikh du01]# du -B 512 > temp; cat temp
0 ./testdir
20608 .
[root@kholmanskikh du01]#

Quoted 6 lines

This happens because we create 'temp' file in the working directory, i.e. 'temp' may already contain some data at the moment 'du' tries to 'fstat' it.

So let's keep the working directory clean and create any extra files outside of it.

Looks good to me, acked.

Signature · 2 lines
Cyril Hrubis
[email protected]
#3 lore raw

PATCH 1/1 du01: create the temp file outside of the working directory

Quoted 3 lines · Cyril Hrubis

Hi!
FYI: I've reproduced this on ppc64le with Btrfs as well.

Thank you. Pushed the patch.