From mboxrd@z Thu Jan 1 00:00:00 1970
From: Pat LaVarre
Subject: Re: zeroes read back more often than appended
Date: 10 Oct 2003 10:39:44 -0600
Sender: linux-fsdevel-owner@vger.kernel.org
Message-ID: <1065803984.3037.7.camel@patehci2>
References: <1065553341.8172.45.camel@patehci2>
<20031007204951.A25423@falcon.csc.calpoly.edu>
<1065732882.5176.14.camel@patehci2> <1065747151.2314.12.camel@patehci2>
Mime-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
Return-path:
Received: from email-out2.iomega.com ([147.178.1.83]:48538 "EHLO
email.iomega.com") by vger.kernel.org with ESMTP id S263094AbTJJQj7
(ORCPT );
Fri, 10 Oct 2003 12:39:59 -0400
Received: from royntex01.iomegacorp.com (unknown [147.178.90.120])
by email.iomega.com (Postfix) with ESMTP id 4902C1B85
for ; Fri, 10 Oct 2003 10:39:58 -0600 (MDT)
To: linux-fsdevel@vger.kernel.org
In-Reply-To: <1065747151.2314.12.camel@patehci2>
List-Id: linux-fsdevel.vger.kernel.org
Offline we spoke of trying again without letting loop.ko allot any of
the blocks of backing store i.e. patching the test script to write all
blocks:
- dd if=/dev/zero of=dd.bin bs=1M seek=1023 count=1
+ dd if=/dev/zero of=dd.bin bs=1M seek=0 count=1024
Definitely I very much appreciate the suggestion ...
But I regret to report that here I see that patch only slows down the
test, it does not change the results.
Still for me the quick reliably troublesome test cases are such as:
time udfwh mkudffs 0xFFFF 0xC00
time udfwh mkudffs 0xFFFFFF 0xC
Given that I'm now actually waiting to write a disk image full of
zeroes, I've shrunk the disk to 256 MiB from 1024 GiB. Conveniently I
find I see trouble. With slightly fewer writes, whether I see trouble
and whether dmesg complains varies.
Indeed, at least twice now, I've seen my kernel crash, though possibly
only back when I was letting loop.ko allot blocks of backing store.
Pat LaVarre
-- example tty log
$
$ # more zeroes read than appended, but no dmesg
$ #
$ time udfwh mkudffs 0xFFFFFF 0xA
Linux 2.6.0-test7 i686
/mnt/hda11
dd if=/dev/zero of=dd.bin bs=1M seek=0 count=256 2>/dev/null
-rw-rw-r-- 1 pat pat 268435456 Oct 10 10:27 dd.bin
mkudffs 1.0.0b2 for UDF FS 1.0.0-cvs, 2002/02/09
0
hexdump -C wh.bin | head -3
00000000 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa |................|
*
0098b000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
real 0m15.199s
user 0m3.307s
sys 0m2.956s
$
$ # no trouble, read back only the appended bytes, no zeroes
$ #
$ time udfwh mkudffs 0xFFFFFF 0xA
Linux 2.6.0-test7 i686
/mnt/hda11
dd if=/dev/zero of=dd.bin bs=1M seek=0 count=256 2>/dev/null
-rw-rw-r-- 1 pat pat 268435456 Oct 10 10:27 dd.bin
mkudffs 1.0.0b2 for UDF FS 1.0.0-cvs, 2002/02/09
0
hexdump -C wh.bin | head -3
00000000 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa |................|
*
09fffff0 aa aa aa aa aa aa |......|
real 0m14.377s
user 0m3.275s
sys 0m2.684s
$
$ ...
$ # troublesome zeroes together with menacing dmesg
$ #
$ time udfwh mkudffs 0xFFFFFF 0xA
Linux 2.6.0-test7 i686
/mnt/hda11
dd if=/dev/zero of=dd.bin bs=1M seek=0 count=256 2>/dev/null
-rw-rw-r-- 1 pat pat 268435456 Oct 10 10:30 dd.bin
mkudffs 1.0.0b2 for UDF FS 1.0.0-cvs, 2002/02/09
0
hexdump -C wh.bin | head -3
00000000 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa |................|
*
0853f000 00 00 00 00 00 00 00 00 aa aa aa aa aa aa aa aa |................|
+++ 2.dmesg 2003-10-10 10:30:43.095187696 -0600
+8 already set
+UDF-fs DEBUG fs/udf/balloc.c:192:udf_bitmap_free_blocks: bit 2919 already set
+UDF-fs DEBUG fs/udf/balloc.c:193:udf_bitmap_free_blocks: byte=ffffff80
+UDF-fs DEBUG fs/udf/balloc.c:192:udf_bitmap_free_blocks: bit 2919 already set
[...]
real 0m16.222s
user 0m3.330s
sys 0m2.929s
$
--- udfwh (new version)
#!/bin/bash
uname -msr
pwd
rm dd.bin
cmd='dd if=/dev/zero of=dd.bin bs=1M seek=255 count=1'
cmd='dd if=/dev/zero of=dd.bin bs=1M seek=0 count=256'
echo "$cmd 2>/dev/null"
$cmd 2>/dev/null
ls -l dd.bin
sudo losetup /dev/loop0 dd.bin
sudo $1 2>&1 | head -1
sudo $1 /dev/loop0 >/dev/null
sudo mount /dev/loop0 /mnt/loop0
sudo chown `id -u`:`id -g` /mnt/loop0/.
dmesg >1.dmesg
cd /mnt/loop0
wh $2 $3
cd -
dmesg >2.dmesg
diff -u 1.dmesg 2.dmesg | grep '^\+' | head -5
rm 1.dmesg 2.dmesg
sudo umount /mnt/loop0
sudo losetup -d /dev/loop0
--- wh.c (same version as before, no change)
#include
#include
#include
#include
int main(int argc, char * argv[]) // 0xFF600 0xC8
{
int width;
int height;
char * chars;
char nonzero;
FILE * fi;
int i;
int rc;
char const * st;
--argc; ++argv;
assert(argc == 2);
rc = sscanf(argv[0], "0x%X", &width);
assert(rc == 1);
rc = sscanf(argv[1], "0x%X", &height);
assert(rc == 1);
nonzero = '\xAA';
chars = malloc(width);
assert(chars != NULL);
memset(&chars[0], nonzero, width);
fi = fopen("wh.bin", "wb");
assert(fi != NULL);
for (i = 0; i < height; ++i) {
fprintf(stderr, "\r%d ", height - i - 1);
rc = fwrite(chars, 1, width, fi);
assert(rc == width);
}
rc = fclose(fi);
assert(rc == 0);
fprintf(stderr, "\n");
st = "hexdump -C wh.bin | head -3";
fprintf(stderr, "%s\n", st);
(void) system(st);
return 0;
}
---