diff options
author | Bruce Evans <bde@FreeBSD.org> | 2001-04-30 14:35:35 +0000 |
---|---|---|
committer | Bruce Evans <bde@FreeBSD.org> | 2001-04-30 14:35:35 +0000 |
commit | 438abdb9c670915614121fb938d47ed3f0ce9a37 (patch) | |
tree | d42669e880000b3ab68348bf7065b72a95740291 /sys/fs | |
parent | 0bc252560d332ff279ae4f51ea43f63739500658 (diff) | |
download | src-438abdb9c670915614121fb938d47ed3f0ce9a37.tar.gz src-438abdb9c670915614121fb938d47ed3f0ce9a37.zip |
Backed out previous commit. It cause massive filesystem corruption,
not to mention a compile-time warning about the critical function
becoming unused, by replacing spec_bmap() with vop_stdbmap().
ntfs seems to have the same bug.
The factor for converting specfs block numbers to physical block
numbers is 1, but vop_stdbmap() uses the bogus factor
btodb(ap->a_vp->v_mount->mnt_stat.f_iosize), which is 16 for ffs with
the default block size of 8K. This factor is bogus even for vop_stdbmap()
-- the correct factor is related to the filesystem blocksize which is not
necessarily the same to the optimal i/o size. vop_stdbmap() was apparently
cloned from nfs where these sizes happen to be the same.
There may also be a problem with a_vp->v_mount being null. spec_bmap()
still checks for this, but I think the checks in specfs are dead code
which used to support block devices.
Notes
Notes:
svn path=/head/; revision=76146
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/specfs/spec_vnops.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/fs/specfs/spec_vnops.c b/sys/fs/specfs/spec_vnops.c index 95922c83d490..2940f404b779 100644 --- a/sys/fs/specfs/spec_vnops.c +++ b/sys/fs/specfs/spec_vnops.c @@ -73,6 +73,7 @@ static struct vnodeopv_entry_desc spec_vnodeop_entries[] = { { &vop_default_desc, (vop_t *) vop_defaultop }, { &vop_access_desc, (vop_t *) vop_ebadf }, { &vop_advlock_desc, (vop_t *) spec_advlock }, + { &vop_bmap_desc, (vop_t *) spec_bmap }, { &vop_close_desc, (vop_t *) spec_close }, { &vop_create_desc, (vop_t *) vop_panic }, { &vop_freeblks_desc, (vop_t *) spec_freeblks }, |