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; } ---