Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/vfs_mount.c
Show First 20 Lines • Show All 755 Lines • ▼ Show 20 Lines | vfs_mount_destroy(struct mount *mp) | ||||
if (mp->mnt_vnodecovered != NULL) | if (mp->mnt_vnodecovered != NULL) | ||||
vrele(mp->mnt_vnodecovered); | vrele(mp->mnt_vnodecovered); | ||||
#ifdef MAC | #ifdef MAC | ||||
mac_mount_destroy(mp); | mac_mount_destroy(mp); | ||||
#endif | #endif | ||||
if (mp->mnt_opt != NULL) | if (mp->mnt_opt != NULL) | ||||
vfs_freeopts(mp->mnt_opt); | vfs_freeopts(mp->mnt_opt); | ||||
if (mp->mnt_exjail != NULL) { | |||||
atomic_subtract_int(&mp->mnt_exjail->cr_prison->pr_exportcnt, | |||||
markj: Or use `atomic_sub_int`. | |||||
1); | |||||
crfree(mp->mnt_exjail); | |||||
} | |||||
if (mp->mnt_export != NULL) { | if (mp->mnt_export != NULL) { | ||||
vfs_free_addrlist(mp->mnt_export); | vfs_free_addrlist(mp->mnt_export); | ||||
free(mp->mnt_export, M_MOUNT); | free(mp->mnt_export, M_MOUNT); | ||||
} | } | ||||
crfree(mp->mnt_cred); | crfree(mp->mnt_cred); | ||||
uma_zfree(mount_zone, mp); | uma_zfree(mount_zone, mp); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 618 Lines • ▼ Show 20 Lines | case (sizeof(o2export)): | ||||
export.ex_numsecflavors = o2export.ex_numsecflavors; | export.ex_numsecflavors = o2export.ex_numsecflavors; | ||||
if (export.ex_numsecflavors < MAXSECFLAVORS) { | if (export.ex_numsecflavors < MAXSECFLAVORS) { | ||||
for (i = 0; i < export.ex_numsecflavors; i++) | for (i = 0; i < export.ex_numsecflavors; i++) | ||||
export.ex_secflavors[i] = | export.ex_secflavors[i] = | ||||
o2export.ex_secflavors[i]; | o2export.ex_secflavors[i]; | ||||
} else | } else | ||||
export_error = EINVAL; | export_error = EINVAL; | ||||
if (export_error == 0) | if (export_error == 0) | ||||
export_error = vfs_export(mp, &export); | export_error = vfs_export(mp, &export, true); | ||||
free(export.ex_groups, M_TEMP); | free(export.ex_groups, M_TEMP); | ||||
break; | break; | ||||
case (sizeof(export)): | case (sizeof(export)): | ||||
bcopy(bufp, &export, len); | bcopy(bufp, &export, len); | ||||
grps = NULL; | grps = NULL; | ||||
if (export.ex_ngroups > 0) { | if (export.ex_ngroups > 0) { | ||||
if (export.ex_ngroups <= NGROUPS_MAX) { | if (export.ex_ngroups <= NGROUPS_MAX) { | ||||
grps = malloc(export.ex_ngroups * | grps = malloc(export.ex_ngroups * | ||||
sizeof(gid_t), M_TEMP, M_WAITOK); | sizeof(gid_t), M_TEMP, M_WAITOK); | ||||
export_error = copyin(export.ex_groups, | export_error = copyin(export.ex_groups, | ||||
grps, export.ex_ngroups * | grps, export.ex_ngroups * | ||||
sizeof(gid_t)); | sizeof(gid_t)); | ||||
if (export_error == 0) | if (export_error == 0) | ||||
export.ex_groups = grps; | export.ex_groups = grps; | ||||
} else | } else | ||||
export_error = EINVAL; | export_error = EINVAL; | ||||
} else if (export.ex_ngroups == 0) | } else if (export.ex_ngroups == 0) | ||||
export.ex_groups = NULL; | export.ex_groups = NULL; | ||||
else | else | ||||
export_error = EINVAL; | export_error = EINVAL; | ||||
if (export_error == 0) | if (export_error == 0) | ||||
export_error = vfs_export(mp, &export); | export_error = vfs_export(mp, &export, true); | ||||
free(grps, M_TEMP); | free(grps, M_TEMP); | ||||
break; | break; | ||||
default: | default: | ||||
export_error = EINVAL; | export_error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,631 Lines • Show Last 20 Lines |
Or use atomic_sub_int.