--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -424,7 +424,7 @@ int cpio_main(int argc UNUSED_PARAM, cha
 	if (archive_handle->cpio__blocks != (off_t)-1
 	 && !(opt & CPIO_OPT_QUIET)
 	) {
-		printf("%"OFF_FMT"u blocks\n", archive_handle->cpio__blocks);
+		fprintf(stderr, "%"OFF_FMT"u blocks\n", archive_handle->cpio__blocks);
 	}
 
 	return EXIT_SUCCESS;
--- a/testsuite/cpio.tests
+++ b/testsuite/cpio.tests
@@ -32,7 +32,7 @@ rm -rf cpio.testdir cpio.testdir2 2>/dev
 # testing "test name" "command" "expected result" "file input" "stdin"
 
 testing "cpio extracts zero-sized hardlinks" \
-"$ECHO -ne '$hexdump' | bzcat | cpio -i; echo \$?;
+"$ECHO -ne '$hexdump' | bzcat | cpio -i 2>&1; echo \$?;
 ls -ln cpio.testdir | $FILTER_LS" \
 "\
 1 blocks
@@ -45,7 +45,7 @@ ls -ln cpio.testdir | $FILTER_LS" \
 
 test x"$SKIP_KNOWN_BUGS" = x"" && {
 # Currently fails. Numerous buglets: "1 blocks" versus "1 block",
-# "1 block" must go to stderr, does not list cpio.testdir/x and cpio.testdir/y
+# does not list cpio.testdir/x and cpio.testdir/y
 testing "cpio lists hardlinks" \
 "$ECHO -ne '$hexdump' | bzcat | cpio -t 2>&1; echo \$?" \
 "\
@@ -70,7 +70,7 @@ ln cpio.testdir/nonempty cpio.testdir/no
 mkdir cpio.testdir2
 
 testing "cpio extracts zero-sized hardlinks 2" \
-"find cpio.testdir | cpio -H newc --create | (cd cpio.testdir2 && cpio -i); echo \$?;
+"find cpio.testdir | cpio -H newc --create | (cd cpio.testdir2 && cpio -i 2>&1); echo \$?;
 ls -ln cpio.testdir2/cpio.testdir | $FILTER_LS" \
 "\
 2 blocks
@@ -87,7 +87,7 @@ ls -ln cpio.testdir2/cpio.testdir | $FIL
 # Was trying to create "/usr/bin", correct is "usr/bin".
 rm -rf cpio.testdir
 testing "cpio -p with absolute paths" \
-"echo /usr/bin | cpio -dp cpio.testdir; echo \$?;
+"echo /usr/bin | cpio -dp cpio.testdir 2>&1; echo \$?;
 ls cpio.testdir" \
 "\
 1 blocks