diff options
-rw-r--r-- | fs/namespace.c | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index ae35d8b6aca8..16c2f84c6570 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -4766,15 +4766,6 @@ static void statmount_string(struct kstatmount *s, u64 mask, statmount_func_t fu sm->mask |= mask; } -static void statmount_numeric(struct kstatmount *s, u64 mask, statmount_func_t func) -{ - if (s->err || !(s->mask & mask)) - return; - - s->err = func(s); - s->sm.mask |= mask; -} - static u64 mnt_to_attr_flags(struct vfsmount *mnt) { unsigned int mnt_flags = READ_ONCE(mnt->mnt_flags); @@ -4822,22 +4813,22 @@ static u64 mnt_to_propagation_flags(struct mount *m) return propagation; } -static int statmount_sb_basic(struct kstatmount *s) +static void statmount_sb_basic(struct kstatmount *s) { struct super_block *sb = s->mnt->mnt_sb; + s->sm.mask |= STATMOUNT_SB_BASIC; s->sm.sb_dev_major = MAJOR(sb->s_dev); s->sm.sb_dev_minor = MINOR(sb->s_dev); s->sm.sb_magic = sb->s_magic; s->sm.sb_flags = sb->s_flags & (SB_RDONLY|SB_SYNCHRONOUS|SB_DIRSYNC|SB_LAZYTIME); - - return 0; } -static int statmount_mnt_basic(struct kstatmount *s) +static void statmount_mnt_basic(struct kstatmount *s) { struct mount *m = real_mount(s->mnt); + s->sm.mask |= STATMOUNT_MNT_BASIC; s->sm.mnt_id = m->mnt_id_unique; s->sm.mnt_parent_id = m->mnt_parent->mnt_id_unique; s->sm.mnt_id_old = m->mnt_id; @@ -4846,20 +4837,15 @@ static int statmount_mnt_basic(struct kstatmount *s) s->sm.mnt_propagation = mnt_to_propagation_flags(m); s->sm.mnt_peer_group = IS_MNT_SHARED(m) ? m->mnt_group_id : 0; s->sm.mnt_master = IS_MNT_SLAVE(m) ? m->mnt_master->mnt_group_id : 0; - - return 0; } -static int statmount_propagate_from(struct kstatmount *s) +static void statmount_propagate_from(struct kstatmount *s) { struct mount *m = real_mount(s->mnt); - if (!IS_MNT_SLAVE(m)) - return 0; - - s->sm.propagate_from = get_dominating_id(m, ¤t->fs->root); - - return 0; + s->sm.mask |= STATMOUNT_PROPAGATE_FROM; + if (IS_MNT_SLAVE(m)) + s->sm.propagate_from = get_dominating_id(m, ¤t->fs->root); } static int statmount_mnt_root(struct kstatmount *s) @@ -4911,9 +4897,15 @@ static int do_statmount(struct kstatmount *s) if (err) return err; - statmount_numeric(s, STATMOUNT_SB_BASIC, statmount_sb_basic); - statmount_numeric(s, STATMOUNT_MNT_BASIC, statmount_mnt_basic); - statmount_numeric(s, STATMOUNT_PROPAGATE_FROM, statmount_propagate_from); + if (s->mask & STATMOUNT_SB_BASIC) + statmount_sb_basic(s); + + if (s->mask & STATMOUNT_MNT_BASIC) + statmount_mnt_basic(s); + + if (s->mask & STATMOUNT_PROPAGATE_FROM) + statmount_propagate_from(s); + statmount_string(s, STATMOUNT_FS_TYPE, statmount_fs_type, &sm->fs_type); statmount_string(s, STATMOUNT_MNT_ROOT, statmount_mnt_root, &sm->mnt_root); statmount_string(s, STATMOUNT_MNT_POINT, statmount_mnt_point, &sm->mnt_point); |