diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2021-08-26 08:29:47 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2021-08-26 11:38:31 +0000 |
commit | 7b2561b46be609deedeaacb7ccb35b5bc70d77ad (patch) | |
tree | db8594c799ddf016eb2760d2d9f75e56bbd2078d /sys/kern/vfs_mount.c | |
parent | da3a09d8941dc29f20447e263b3a6d60370c6203 (diff) | |
download | src-7b2561b46be609deedeaacb7ccb35b5bc70d77ad.tar.gz src-7b2561b46be609deedeaacb7ccb35b5bc70d77ad.zip |
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r-- | sys/kern/vfs_mount.c | 15 |
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. |