162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  linux/fs/pnode.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * (C) Copyright IBM Corporation 2005.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#ifndef _LINUX_PNODE_H
862306a36Sopenharmony_ci#define _LINUX_PNODE_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/list.h>
1162306a36Sopenharmony_ci#include "mount.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define IS_MNT_SHARED(m) ((m)->mnt.mnt_flags & MNT_SHARED)
1462306a36Sopenharmony_ci#define IS_MNT_SLAVE(m) ((m)->mnt_master)
1562306a36Sopenharmony_ci#define IS_MNT_NEW(m)  (!(m)->mnt_ns || is_anon_ns((m)->mnt_ns))
1662306a36Sopenharmony_ci#define CLEAR_MNT_SHARED(m) ((m)->mnt.mnt_flags &= ~MNT_SHARED)
1762306a36Sopenharmony_ci#define IS_MNT_UNBINDABLE(m) ((m)->mnt.mnt_flags & MNT_UNBINDABLE)
1862306a36Sopenharmony_ci#define IS_MNT_MARKED(m) ((m)->mnt.mnt_flags & MNT_MARKED)
1962306a36Sopenharmony_ci#define SET_MNT_MARK(m) ((m)->mnt.mnt_flags |= MNT_MARKED)
2062306a36Sopenharmony_ci#define CLEAR_MNT_MARK(m) ((m)->mnt.mnt_flags &= ~MNT_MARKED)
2162306a36Sopenharmony_ci#define IS_MNT_LOCKED(m) ((m)->mnt.mnt_flags & MNT_LOCKED)
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#define CL_EXPIRE    		0x01
2462306a36Sopenharmony_ci#define CL_SLAVE     		0x02
2562306a36Sopenharmony_ci#define CL_COPY_UNBINDABLE	0x04
2662306a36Sopenharmony_ci#define CL_MAKE_SHARED 		0x08
2762306a36Sopenharmony_ci#define CL_PRIVATE 		0x10
2862306a36Sopenharmony_ci#define CL_SHARED_TO_SLAVE	0x20
2962306a36Sopenharmony_ci#define CL_COPY_MNT_NS_FILE	0x40
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define CL_COPY_ALL		(CL_COPY_UNBINDABLE | CL_COPY_MNT_NS_FILE)
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistatic inline void set_mnt_shared(struct mount *mnt)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	mnt->mnt.mnt_flags &= ~MNT_SHARED_MASK;
3662306a36Sopenharmony_ci	mnt->mnt.mnt_flags |= MNT_SHARED;
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_civoid change_mnt_propagation(struct mount *, int);
4062306a36Sopenharmony_ciint propagate_mnt(struct mount *, struct mountpoint *, struct mount *,
4162306a36Sopenharmony_ci		struct hlist_head *);
4262306a36Sopenharmony_ciint propagate_umount(struct list_head *);
4362306a36Sopenharmony_ciint propagate_mount_busy(struct mount *, int);
4462306a36Sopenharmony_civoid propagate_mount_unlock(struct mount *);
4562306a36Sopenharmony_civoid mnt_release_group_id(struct mount *);
4662306a36Sopenharmony_ciint get_dominating_id(struct mount *mnt, const struct path *root);
4762306a36Sopenharmony_ciint mnt_get_count(struct mount *mnt);
4862306a36Sopenharmony_civoid mnt_set_mountpoint(struct mount *, struct mountpoint *,
4962306a36Sopenharmony_ci			struct mount *);
5062306a36Sopenharmony_civoid mnt_change_mountpoint(struct mount *parent, struct mountpoint *mp,
5162306a36Sopenharmony_ci			   struct mount *mnt);
5262306a36Sopenharmony_cistruct mount *copy_tree(struct mount *, struct dentry *, int);
5362306a36Sopenharmony_cibool is_path_reachable(struct mount *, struct dentry *,
5462306a36Sopenharmony_ci			 const struct path *root);
5562306a36Sopenharmony_ciint count_mounts(struct mnt_namespace *ns, struct mount *mnt);
5662306a36Sopenharmony_cibool propagation_would_overmount(const struct mount *from,
5762306a36Sopenharmony_ci				 const struct mount *to,
5862306a36Sopenharmony_ci				 const struct mountpoint *mp);
5962306a36Sopenharmony_ci#endif /* _LINUX_PNODE_H */
60