cvs commit: src/sys/kern vfs_bio.c

看板DFBSD_commit作者時間21年前 (2005/01/30 03:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
dillon 2005/01/29 11:17:06 PST DragonFly src repository Modified files: sys/kern vfs_bio.c Log: getblk() has an old crufty API in which the logical block size is not a well known quantity. Device drivers standardize on using DEV_BSIZE (512), while file ops are supposed to use mount->mnt_stat.f_iosize. The existing code was testing for a non-NULL vnode->v_mountedhere field but this field is part of a union and only valid for VDIR types. It was being improperly tested on non-VDIR vnode types. In particular, if vn_isdisk() fails due to the disk device being ripped out from under a filesystem, the code would fall through and try to use v_mountedhere, leading to a crash. It also makes no sense to use the target mount to calculate the block size for the underlying mount point's vnode, so this test has been removed entirely. The vn_isdisk() test has been replaced with an explicit VBLK/VCHR test. Finally, note that filesystems like UFS use varying buffer cache buffer sizes for different areas of the same block device (e.g. bitmap areas, inode area, file data areas, superblock), which is why DEV_BSIZE is being used here. What really needs to happen is for b_blkno to be entirely removed in favor of a 64 bit offset. Crash-Reported-by: Vyacheslav Bocharov <list@smz.com.ua> Revision Changes Path 1.33 +16 -3 src/sys/kern/vfs_bio.c http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_bio.c.diff?r1=1.32&r2=1.33&f=u
文章代碼(AID): #11--Ix00 (DFBSD_commit)
文章代碼(AID): #11--Ix00 (DFBSD_commit)