From ef213df2874121624a2425c460b4847e1a6a8461 Mon Sep 17 00:00:00 2001 From: peadar Date: Sat, 29 Jan 2005 16:23:39 +0000 Subject: Unbreak a few filesystems for which vnode_create_vobject() wasn't being called in "open", causing mmap() to fail. Where possible, pass size of file to vnode_create_vobject() rather than having it find it out the hard way via VOP_LOOKUP Reviewed by: phk --- sys/isofs/cd9660/cd9660_vnops.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'sys/isofs/cd9660/cd9660_vnops.c') diff --git a/sys/isofs/cd9660/cd9660_vnops.c b/sys/isofs/cd9660/cd9660_vnops.c index bc45abe..5b3d723 100644 --- a/sys/isofs/cd9660/cd9660_vnops.c +++ b/sys/isofs/cd9660/cd9660_vnops.c @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include static vop_setattr_t cd9660_setattr; +static vop_open_t cd9660_open; static vop_access_t cd9660_access; static vop_getattr_t cd9660_getattr; static vop_ioctl_t cd9660_ioctl; @@ -156,6 +157,23 @@ cd9660_access(ap) } static int +cd9660_open(ap) + struct vop_open_args /* { + struct vnode *a_vp; + int a_mode; + struct ucred *a_cred; + struct thread *a_td; + int a_fdidx; + } */ *ap; +{ + struct iso_node *ip = VTOI(ap->a_vp); + + vnode_create_vobject(ap->a_vp, ip->i_size, ap->a_td); + return 0; +} + + +static int cd9660_getattr(ap) struct vop_getattr_args /* { struct vnode *a_vp; @@ -782,6 +800,7 @@ cd9660_pathconf(ap) */ struct vop_vector cd9660_vnodeops = { .vop_default = &default_vnodeops, + .vop_open = cd9660_open, .vop_access = cd9660_access, .vop_bmap = cd9660_bmap, .vop_cachedlookup = cd9660_lookup, -- cgit v1.1