Hi,
I''ve hit an issue with the free space cache. It looks like we miss
writing
everything to disk on unmount under rough conditions.
Setup: git head cmason/master, /dev/sdv1 is a 55MB partition on an SSD. Run the
following script:
--
DEV=/dev/sdv1
MP=/mnt/scratch
umount $MP
mkfs.btrfs -M $DEV
mount -o inode_cache $DEV $MP
cat /dev/urandom | head -c 654321 > $MP/1
mkdir $MP/2
mv $MP/1 $MP/2/1
btrfs subvol snap $MP $MP/@1
rm $MP/2/1
umount $MP
mount -o inode_cache $DEV $MP
cat /dev/urandom | head -c 654321 > $MP/tempname-1
ls -li $MP/@1/2/1 $MP/tempname-1
--
Actual result:> 257 -rw-r--r-- 1 root root 654321 Oct 16 15:04 /mnt/scratch/@1/2/1
> 259 -rw-r--r-- 1 root root 654321 Oct 16 15:04 /mnt/scratch/tempname-1
Expected result: Both files should have inode 257.
If I make any of the following changes, I get the expected results:
- omit umount/mount from the script
- replace SSD partition by spinning disk''s partition of the same size
- use 266MB partition instead of a 55MB partition (still mixed mode)
- dump 554321 bytes into file "1" instead of 654321
- dump 7654321 bytes into file "1" instead of 654321
Despite being that fragile, with the above script the results are 100%
reproducible here. I wouldn''t be surprised if on a different machine
one would
need different parameter fine-tuning to trigger the problem. I''m happy
to test
patches :-)
-Jan
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html