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