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