Unverified Commit 09b31295 authored by Josef Bacik's avatar Josef Bacik Committed by Christian Brauner
Browse files

fs: export the mount ns id via statmount



In order to allow users to iterate through children mount namespaces via
listmount we need a way for them to know what the ns id for the mount.
Add a new field to statmount called mnt_ns_id which will carry the ns id
for the given mount entry.

Co-developed-by: default avatarChristian Brauner <brauner@kernel.org>
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Link: https://lore.kernel.org/r/6dabf437331fb7415d886f7c64b21cb2a50b1c66.1719243756.git.josef@toxicpanda.com


Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 1901c924
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -4974,6 +4974,14 @@ static int statmount_fs_type(struct kstatmount *s, struct seq_file *seq)
	return 0;
}

static void statmount_mnt_ns_id(struct kstatmount *s)
{
	struct mnt_namespace *ns = current->nsproxy->mnt_ns;

	s->sm.mask |= STATMOUNT_MNT_NS_ID;
	s->sm.mnt_ns_id = ns->seq;
}

static int statmount_string(struct kstatmount *s, u64 flag)
{
	int ret;
@@ -5070,6 +5078,9 @@ static int do_statmount(struct kstatmount *s)
	if (!err && s->mask & STATMOUNT_MNT_POINT)
		err = statmount_string(s, STATMOUNT_MNT_POINT);

	if (!err && s->mask & STATMOUNT_MNT_NS_ID)
		statmount_mnt_ns_id(s);

	if (err)
		return err;

+3 −1
Original line number Diff line number Diff line
@@ -172,7 +172,8 @@ struct statmount {
	__u64 propagate_from;	/* Propagation from in current namespace */
	__u32 mnt_root;		/* [str] Root of mount relative to root of fs */
	__u32 mnt_point;	/* [str] Mountpoint relative to current root */
	__u64 __spare2[50];
	__u64 mnt_ns_id;	/* ID of the mount namespace */
	__u64 __spare2[49];
	char str[];		/* Variable size part containing strings */
};

@@ -202,6 +203,7 @@ struct mnt_id_req {
#define STATMOUNT_MNT_ROOT		0x00000008U	/* Want/got mnt_root  */
#define STATMOUNT_MNT_POINT		0x00000010U	/* Want/got mnt_point */
#define STATMOUNT_FS_TYPE		0x00000020U	/* Want/got fs_type */
#define STATMOUNT_MNT_NS_ID		0x00000040U	/* Want/got mnt_ns_id */

/*
 * Special @mnt_id values that can be passed to listmount