diff options
author | Peter Edwards <peadar@FreeBSD.org> | 2005-01-29 16:23:39 +0000 |
---|---|---|
committer | Peter Edwards <peadar@FreeBSD.org> | 2005-01-29 16:23:39 +0000 |
commit | 72b3e305af69d13145eebcf173957ec0e3a33195 (patch) | |
tree | e0bcb61510046769d944a62c5d3c867680011cc9 /sys/fs/cd9660 | |
parent | 37085a3931ee56e0257fe196b44af468cc2ef375 (diff) | |
download | src-72b3e305af69d13145eebcf173957ec0e3a33195.tar.gz src-72b3e305af69d13145eebcf173957ec0e3a33195.zip |
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
Notes
Notes:
svn path=/head/; revision=140965
Diffstat (limited to 'sys/fs/cd9660')
-rw-r--r-- | sys/fs/cd9660/cd9660_vfsops.c | 2 | ||||
-rw-r--r-- | sys/fs/cd9660/cd9660_vnops.c | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/sys/fs/cd9660/cd9660_vfsops.c b/sys/fs/cd9660/cd9660_vfsops.c index 3d484c9e1363..5830f03ab688 100644 --- a/sys/fs/cd9660/cd9660_vfsops.c +++ b/sys/fs/cd9660/cd9660_vfsops.c @@ -616,7 +616,7 @@ cd9660_fhtovp(mp, fhp, vpp) return (ESTALE); } *vpp = nvp; - vnode_create_vobject(*vpp, 0, curthread); + vnode_create_vobject(*vpp, ip->i_size, curthread); return (0); } diff --git a/sys/fs/cd9660/cd9660_vnops.c b/sys/fs/cd9660/cd9660_vnops.c index bc45abe2909c..5b3d7233d302 100644 --- a/sys/fs/cd9660/cd9660_vnops.c +++ b/sys/fs/cd9660/cd9660_vnops.c @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include <isofs/cd9660/iso_rrip.h> 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, |