e8a28f87d8
Long ago, bread() set b_blkno to the disk block number as a side effect of doing physical i/o (or it just retained the setting from when the i/o was done). The setting is lost when buffers go away and then are reconsituted from VM. bread() originally compensated by doing a VOP_BMAP() to recover b_blkno, but this was no good since it sometimes caused extra i/o or even deadlock for bread()ing metadata to do the bmap. This was fixed in vfs_bio.c 1.33 (1995/03/03) and ffs_balloc.c 1.5, etc., by removing the VOP_BMAP() from bread() and breadn(), and changing all (?) places that used b_blkno to set it if necessary. ext2fs was not imported until later in 1995 and was still depending on the old behaviour of bread() in at least ext2_balloc(). This caused filesystem and file corruption by clobbering direct block numbers in inodes. |
||
---|---|---|
.. | ||
COPYRIGHT.INFO | ||
ext2_alloc.c | ||
ext2_balloc.c | ||
ext2_bmap.c | ||
ext2_extern.h | ||
ext2_fs_sb.h | ||
ext2_fs.h | ||
ext2_inode_cnv.c | ||
ext2_inode.c | ||
ext2_linux_balloc.c | ||
ext2_linux_ialloc.c | ||
ext2_lookup.c | ||
ext2_mount.h | ||
ext2_readwrite.c | ||
ext2_subr.c | ||
ext2_vfsops.c | ||
ext2_vnops.c | ||
fs.h | ||
i386-bitops.h | ||
inode.h |