kern/84983: [udf] [patch] udf filesystem: stat-ting files could randomly fail

Andriy Gapon avg at icyb.net.ua
Fri Feb 1 02:27:19 PST 2008


on 01/02/2008 12:00 Andriy Gapon said the following:
> ---- a different, under-debugged problem -----
> BTW, on some smaller directories (but still large ones) I get some very
> strange problems with reading a directory too. It seems like some bad
> interaction between udf and buffer cache system. I added a lot of
> debugging prints and the problems looks like the following:
> 
> read starting at physical sector (2048-byte one) N, size is ~20K, N%4=0
> 	bread(4 * N, some_big_size)
> 		correct data is read
> repeat the above couple dozen times
> read starting at physical sector (2048-byte one) N+1, size is ~20K
> 	bread(4 * (N+1), some_big_size)
> 		data is read from physical sector N+4 (instead of N+1)
> 
> I remember that Bruce Evance warned me that something like this could
> happen but I couldn't understand him, because I don't understand
> VM/buffer subsystem. I'll try to dig up the email.
> 

Sorry for the flood - additional info:
if I limit max read size in udf_readatoffset() to 2048 (instead of
MAXBSIZE), then large directories can be read OK. Seems like something
with overlapping buffers, maybe?

BTW, here's how I created test environment for the described issues (in
tcsh):

mkdir /tmp/bigdir

cd /tmp/bigdir

set i=1

while ($i < NNNNN)
touch file.$i
set i=`expr $i + 1`
end

cd /tmp

mkisofs -udf -o test.iso bigdir

mdconfig -a -t vnode -f test.iso -S 2048 -u 0

mount_udf /dev/md0 /mnt

ls -l /mnt

-- 
Andriy Gapon


More information about the freebsd-fs mailing list