From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pat LaVarre Subject: Re: zeroes read back more often than appended Date: 20 Oct 2003 17:20:50 -0600 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <1066692050.2814.33.camel@patehci2> References: <1065553341.8172.45.camel@patehci2> <20031007204951.A25423@falcon.csc.calpoly.edu> <1065732882.5176.14.camel@patehci2> <1065747151.2314.12.camel@patehci2> <1065803984.3037.7.camel@patehci2> <1065809754.3037.105.camel@patehci2> <1066091916.3011.2.camel@patehci2> <1066096137.3314.32.camel@patehci2> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Return-path: Received: from email-out1.iomega.com ([147.178.1.82]:14575 "EHLO email.iomega.com") by vger.kernel.org with ESMTP id S262888AbTJTXU5 (ORCPT ); Mon, 20 Oct 2003 19:20:57 -0400 Received: from royntex01.iomegacorp.com (unknown [147.178.90.120]) by email.iomega.com (Postfix) with ESMTP id 7AC8C17B8 for ; Mon, 20 Oct 2003 17:20:56 -0600 (MDT) To: linux-fsdevel@vger.kernel.org In-Reply-To: <1066096137.3314.32.camel@patehci2> List-Id: linux-fsdevel.vger.kernel.org Specifically next I hope to show that appending nonzero bytes to multiple open files reads back wrong. Seemingly as yet I have some tupographical errors in the following. With nonzero dd seek and SMP on and PREEMPT on in -test8, initially I see: 198 whd: whd.c:45: main: Assertion `rc == width' failed. Pat LaVarre --- whd.c #include #include #include #include static FILE * fi[1234]; int main(int argc, char * argv[]) // 0xFF600 0xC8 { int width; int height; int depth; char * chars; char nonzero; int h; int d; int rc; --argc; ++argv; assert(argc == 3); rc = sscanf(argv[0], "0x%X", &width); assert(rc == 1); rc = sscanf(argv[1], "0x%X", &height); assert(rc == 1); rc = sscanf(argv[1], "0x%X", &depth); assert(rc == 1); assert(depth < (sizeof fi / sizeof fi[0])); nonzero = '\xAA'; chars = malloc(width); assert(chars != NULL); memset(&chars[0], nonzero, width); for (d = 0; d < depth; ++d) { char st[123]; sprintf(&st[0], "whd%d.bin", d); fi[d] = fopen(&st[0], "wb"); assert(fi[d] != NULL); } for (h = 0; h < height; ++h) { fprintf(stderr, "\r%d ", height - h - 1); for (d = 0; d < depth; ++d) { rc = fwrite(chars, 1, width, fi[d]); assert(rc == width); } } for (d = 0; d < depth; ++d) { rc = fclose(fi[d]); assert(rc == 0); } fprintf(stderr, "\n"); for (d = 0; d < depth; ++d) { char st[123]; sprintf(&st[0], "hexdump -C whd%d.bin | head -3", d); fprintf(stderr, "%s\n", st); (void) system(st); } return 0; } --- udfwhd #!/bin/bash uname -msr pwd rm dd.bin cmd='dd if=/dev/zero of=dd.bin bs=1M seek=0 count=256' cmd='dd if=/dev/zero of=dd.bin bs=1M seek=255 count=1' 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 whd $2 $3 $4 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 ---