aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/vfs_mount.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2021-08-26 08:29:47 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2021-08-26 11:38:31 +0000
commit7b2561b46be609deedeaacb7ccb35b5bc70d77ad (patch)
treedb8594c799ddf016eb2760d2d9f75e56bbd2078d /sys/kern/vfs_mount.c
parentda3a09d8941dc29f20447e263b3a6d60370c6203 (diff)
downloadsrc-7b2561b46be609deedeaacb7ccb35b5bc70d77ad.tar.gz
src-7b2561b46be609deedeaacb7ccb35b5bc70d77ad.zip
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r--sys/kern/vfs_mount.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 6804f6eb68bf..2d955fc4889f 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -1589,7 +1589,8 @@ kern_unmount(struct thread *td, const char *path, int flags)
struct nameidata nd;
struct mount *mp;
char *pathbuf;
- int error, id0, id1;
+ fsid_t fsid;
+ int error;
AUDIT_ARG_VALUE(flags);
if (jailed(td->td_ucred) || usermount == 0) {
@@ -1607,20 +1608,12 @@ kern_unmount(struct thread *td, const char *path, int flags)
if (flags & MNT_BYFSID) {
AUDIT_ARG_TEXT(pathbuf);
/* Decode the filesystem ID. */
- if (sscanf(pathbuf, "FSID:%d:%d", &id0, &id1) != 2) {
+ if (sscanf(pathbuf, "FSID:%d:%d", &fsid.val[0], &fsid.val[1]) != 2) {
free(pathbuf, M_TEMP);
return (EINVAL);
}
- mtx_lock(&mountlist_mtx);
- TAILQ_FOREACH_REVERSE(mp, &mountlist, mntlist, mnt_list) {
- if (mp->mnt_stat.f_fsid.val[0] == id0 &&
- mp->mnt_stat.f_fsid.val[1] == id1) {
- vfs_ref(mp);
- break;
- }
- }
- mtx_unlock(&mountlist_mtx);
+ mp = vfs_getvfs(&fsid);
} else {
/*
* Try to find global path for path argument.