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);
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;
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)
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);