Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/unionfs/union_vfsops.c
Show First 20 Lines • Show All 286 Lines • ▼ Show 20 Lines | error = unionfs_nodeget(mp, ump->um_uppervp, ump->um_lowervp, | ||||
NULLVP, &(ump->um_rootvp), NULL, td); | NULLVP, &(ump->um_rootvp), NULL, td); | ||||
vrele(upperrootvp); | vrele(upperrootvp); | ||||
if (error != 0) { | if (error != 0) { | ||||
free(ump, M_UNIONFSMNT); | free(ump, M_UNIONFSMNT); | ||||
mp->mnt_data = NULL; | mp->mnt_data = NULL; | ||||
return (error); | return (error); | ||||
} | } | ||||
lowermp = vfs_pin_from_vp(ump->um_lowervp); | lowermp = vfs_register_upper_from_vp(ump->um_lowervp, mp, | ||||
uppermp = vfs_pin_from_vp(ump->um_uppervp); | &ump->um_lower_link); | ||||
uppermp = vfs_register_upper_from_vp(ump->um_uppervp, mp, | |||||
&ump->um_upper_link); | |||||
if (lowermp == NULL || uppermp == NULL) { | if (lowermp == NULL || uppermp == NULL) { | ||||
if (lowermp != NULL) | if (lowermp != NULL) | ||||
vfs_unpin(lowermp); | vfs_unregister_upper(lowermp, &ump->um_lower_link); | ||||
if (uppermp != NULL) | if (uppermp != NULL) | ||||
vfs_unpin(uppermp); | vfs_unregister_upper(uppermp, &ump->um_upper_link); | ||||
free(ump, M_UNIONFSMNT); | free(ump, M_UNIONFSMNT); | ||||
mp->mnt_data = NULL; | mp->mnt_data = NULL; | ||||
return (ENOENT); | return (ENOENT); | ||||
} | } | ||||
MNT_ILOCK(mp); | MNT_ILOCK(mp); | ||||
if ((lowermp->mnt_flag & MNT_LOCAL) != 0 && | if ((lowermp->mnt_flag & MNT_LOCAL) != 0 && | ||||
(uppermp->mnt_flag & MNT_LOCAL) != 0) | (uppermp->mnt_flag & MNT_LOCAL) != 0) | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | for (freeing = 0; (error = vflush(mp, 1, flags, curthread)) != 0;) { | ||||
if (num == freeing) | if (num == freeing) | ||||
break; | break; | ||||
freeing = num; | freeing = num; | ||||
} | } | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
vfs_unpin(ump->um_lowervp->v_mount); | vfs_unregister_upper(ump->um_lowervp->v_mount, &ump->um_lower_link); | ||||
vfs_unpin(ump->um_uppervp->v_mount); | vfs_unregister_upper(ump->um_uppervp->v_mount, &ump->um_upper_link); | ||||
free(ump, M_UNIONFSMNT); | free(ump, M_UNIONFSMNT); | ||||
mp->mnt_data = NULL; | mp->mnt_data = NULL; | ||||
return (0); | return (0); | ||||
} | } | ||||
static int | static int | ||||
unionfs_root(struct mount *mp, int flags, struct vnode **vpp) | unionfs_root(struct mount *mp, int flags, struct vnode **vpp) | ||||
▲ Show 20 Lines • Show All 172 Lines • Show Last 20 Lines |