vfs: clean MNTK_FPLOOKUP if MNT_UNION is set

Elides checking it during lookup.
This commit is contained in:
Mateusz Guzik 2020-08-10 11:51:21 +00:00
parent ca423b858b
commit 03337743db
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=364077
3 changed files with 9 additions and 4 deletions

View File

@ -372,6 +372,13 @@ tmpfs_mount(struct mount *mp)
}
tmp->tm_nomtime = vfs_getopt(mp->mnt_optnew, "nomtime", NULL,
0) == 0;
MNT_ILOCK(mp);
if ((mp->mnt_flag & MNT_UNION) == 0) {
mp->mnt_kern_flag |= MNTK_FPLOOKUP;
} else {
mp->mnt_kern_flag &= ~MNTK_FPLOOKUP;
}
MNT_IUNLOCK(mp);
return (0);
}
@ -462,7 +469,7 @@ tmpfs_mount(struct mount *mp)
mp->mnt_flag |= MNT_LOCAL;
mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED | MNTK_EXTENDED_SHARED |
MNTK_TEXT_REFS | MNTK_NOMSYNC;
if (!nonc)
if (!nonc && (mp->mnt_flag & MNT_UNION) == 0)
mp->mnt_kern_flag |= MNTK_FPLOOKUP;
MNT_IUNLOCK(mp);

View File

@ -3701,8 +3701,6 @@ cache_fplookup_mp_supported(struct mount *mp)
return (false);
if ((mp->mnt_kern_flag & MNTK_FPLOOKUP) == 0)
return (false);
if ((mp->mnt_flag & MNT_UNION) != 0)
return (false);
return (true);
}

View File

@ -805,7 +805,7 @@ ffs_mount(struct mount *mp)
*/
if ((mp->mnt_kern_flag & MNTK_FPLOOKUP) != 0)
panic("MNTK_FPLOOKUP set on mount %p when it should not be", mp);
if ((mp->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0)
if ((mp->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS | MNT_UNION)) == 0)
mp->mnt_kern_flag |= MNTK_FPLOOKUP;
MNT_IUNLOCK(mp);