|
|
| version 1.4, 2004/04/24 04:32:05 | version 1.5, 2004/05/19 22:53:06 |
|---|---|
| Line 225 udf_checktag(struct desc_tag *tag, uint1 | Line 225 udf_checktag(struct desc_tag *tag, uint1 |
| } | } |
| static int | static int |
| udf_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td) { | udf_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td) |
| { | |
| struct buf *bp = NULL; | struct buf *bp = NULL; |
| struct anchor_vdp avdp; | struct anchor_vdp avdp; |
| struct udf_mnt *udfmp = NULL; | struct udf_mnt *udfmp = NULL; |
| Line 233 udf_mountfs(struct vnode *devvp, struct | Line 234 udf_mountfs(struct vnode *devvp, struct |
| struct logvol_desc *lvd; | struct logvol_desc *lvd; |
| struct fileset_desc *fsd; | struct fileset_desc *fsd; |
| struct file_entry *root_fentry; | struct file_entry *root_fentry; |
| dev_t dev; | |
| uint32_t sector, size, mvds_start, mvds_end; | uint32_t sector, size, mvds_start, mvds_end; |
| uint32_t fsd_offset = 0; | uint32_t fsd_offset = 0; |
| uint16_t part_num = 0, fsd_part = 0; | uint16_t part_num = 0, fsd_part = 0; |
| Line 246 udf_mountfs(struct vnode *devvp, struct | Line 248 udf_mountfs(struct vnode *devvp, struct |
| */ | */ |
| if ((error = vfs_mountedon(devvp))) | if ((error = vfs_mountedon(devvp))) |
| return(error); | return(error); |
| if (vcount(devvp) > 1) | if (count_udev(devvp) > 0) |
| return(EBUSY); | return(EBUSY); |
| if ((error = vinvalbuf(devvp, V_SAVE, td, 0, 0))) | if ((error = vinvalbuf(devvp, V_SAVE, td, 0, 0))) |
| return(error); | return(error); |
| Line 257 udf_mountfs(struct vnode *devvp, struct | Line 259 udf_mountfs(struct vnode *devvp, struct |
| if (error) | if (error) |
| return(error); | return(error); |
| needclose = 1; | needclose = 1; |
| dev = devvp->v_rdev; | |
| udfmp = malloc(sizeof(*udfmp), M_UDFMOUNT, M_WAITOK | M_ZERO); | udfmp = malloc(sizeof(*udfmp), M_UDFMOUNT, M_WAITOK | M_ZERO); |
| mp->mnt_data = (qaddr_t)udfmp; | mp->mnt_data = (qaddr_t)udfmp; |
| mp->mnt_stat.f_fsid.val[0] = dev2udev(devvp->v_rdev); | mp->mnt_stat.f_fsid.val[0] = dev2udev(dev); |
| mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; | mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; |
| mp->mnt_maxsymlinklen = 0; | mp->mnt_maxsymlinklen = 0; |
| mp->mnt_flag |= MNT_LOCAL; | mp->mnt_flag |= MNT_LOCAL; |
| udfmp->im_mountp = mp; | udfmp->im_mountp = mp; |
| udfmp->im_dev = devvp->v_rdev; | udfmp->im_dev = dev; |
| udfmp->im_devvp = devvp; | udfmp->im_devvp = devvp; |
| bsize = 2048; /* XXX Should probe the media for it's size */ | bsize = 2048; /* XXX Should probe the media for it's size */ |
| Line 410 udf_unmount(struct mount *mp, int mntfla | Line 413 udf_unmount(struct mount *mp, int mntfla |
| if ((error = vflush(mp, 0, flags))) | if ((error = vflush(mp, 0, flags))) |
| return (error); | return (error); |
| udfmp->im_devvp->v_specmountpoint = NULL; | udfmp->im_devvp->v_rdev->si_mountpoint = NULL; |
| error = VOP_CLOSE(udfmp->im_devvp, FREAD, td); | error = VOP_CLOSE(udfmp->im_devvp, FREAD, td); |
| vrele(udfmp->im_devvp); | vrele(udfmp->im_devvp); |