File Index
Files and directories
Sign in
FILE

samples-vfs.h

File preview with syntax highlighting.

linux-6.19.14/samples/vfs/samples-vfs.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2
  3#ifndef __SAMPLES_VFS_H
  4#define __SAMPLES_VFS_H
  5
  6#include <errno.h>
  7#include <linux/types.h>
  8#include <sys/ioctl.h>
  9#include <sys/syscall.h>
 10
 11#define die_errno(format, ...)                                             \
 12	do {                                                               \
 13		fprintf(stderr, "%m | %s: %d: %s: " format "\n", __FILE__, \
 14			__LINE__, __func__, ##__VA_ARGS__);                \
 15		exit(EXIT_FAILURE);                                        \
 16	} while (0)
 17
 18struct statmount {
 19	__u32 size;		/* Total size, including strings */
 20	__u32 mnt_opts;		/* [str] Options (comma separated, escaped) */
 21	__u64 mask;		/* What results were written */
 22	__u32 sb_dev_major;	/* Device ID */
 23	__u32 sb_dev_minor;
 24	__u64 sb_magic;		/* ..._SUPER_MAGIC */
 25	__u32 sb_flags;		/* SB_{RDONLY,SYNCHRONOUS,DIRSYNC,LAZYTIME} */
 26	__u32 fs_type;		/* [str] Filesystem type */
 27	__u64 mnt_id;		/* Unique ID of mount */
 28	__u64 mnt_parent_id;	/* Unique ID of parent (for root == mnt_id) */
 29	__u32 mnt_id_old;	/* Reused IDs used in proc/.../mountinfo */
 30	__u32 mnt_parent_id_old;
 31	__u64 mnt_attr;		/* MOUNT_ATTR_... */
 32	__u64 mnt_propagation;	/* MS_{SHARED,SLAVE,PRIVATE,UNBINDABLE} */
 33	__u64 mnt_peer_group;	/* ID of shared peer group */
 34	__u64 mnt_master;	/* Mount receives propagation from this ID */
 35	__u64 propagate_from;	/* Propagation from in current namespace */
 36	__u32 mnt_root;		/* [str] Root of mount relative to root of fs */
 37	__u32 mnt_point;	/* [str] Mountpoint relative to current root */
 38	__u64 mnt_ns_id;	/* ID of the mount namespace */
 39	__u32 fs_subtype;	/* [str] Subtype of fs_type (if any) */
 40	__u32 sb_source;	/* [str] Source string of the mount */
 41	__u32 opt_num;		/* Number of fs options */
 42	__u32 opt_array;	/* [str] Array of nul terminated fs options */
 43	__u32 opt_sec_num;	/* Number of security options */
 44	__u32 opt_sec_array;	/* [str] Array of nul terminated security options */
 45	__u32 mnt_uidmap_num;	/* Number of uid mappings */
 46	__u32 mnt_uidmap;	/* [str] Array of uid mappings */
 47	__u32 mnt_gidmap_num;	/* Number of gid mappings */
 48	__u32 mnt_gidmap;	/* [str] Array of gid mappings */
 49	__u64 __spare2[44];
 50	char str[];		/* Variable size part containing strings */
 51};
 52
 53struct mnt_id_req {
 54	__u32 size;
 55	__u32 spare;
 56	__u64 mnt_id;
 57	__u64 param;
 58	__u64 mnt_ns_id;
 59};
 60
 61#ifndef MNT_ID_REQ_SIZE_VER0
 62#define MNT_ID_REQ_SIZE_VER0	24 /* sizeof first published struct */
 63#endif
 64
 65#ifndef MNT_ID_REQ_SIZE_VER1
 66#define MNT_ID_REQ_SIZE_VER1	32 /* sizeof second published struct */
 67#endif
 68
 69/* Get the id for a mount namespace */
 70#ifndef NS_GET_MNTNS_ID
 71#define NS_GET_MNTNS_ID _IO(0xb7, 0x5)
 72#endif
 73
 74struct mnt_ns_info {
 75	__u32 size;
 76	__u32 nr_mounts;
 77	__u64 mnt_ns_id;
 78};
 79
 80#ifndef MNT_NS_INFO_SIZE_VER0
 81#define MNT_NS_INFO_SIZE_VER0 16 /* size of first published struct */
 82#endif
 83
 84#ifndef NS_MNT_GET_INFO
 85#define NS_MNT_GET_INFO _IOR(0xb7, 10, struct mnt_ns_info)
 86#endif
 87
 88#ifndef NS_MNT_GET_NEXT
 89#define NS_MNT_GET_NEXT _IOR(0xb7, 11, struct mnt_ns_info)
 90#endif
 91
 92#ifndef NS_MNT_GET_PREV
 93#define NS_MNT_GET_PREV _IOR(0xb7, 12, struct mnt_ns_info)
 94#endif
 95
 96#ifndef PIDFD_GET_MNT_NAMESPACE
 97#define PIDFD_GET_MNT_NAMESPACE _IO(0xFF, 3)
 98#endif
 99
100#ifndef __NR_listmount
101#define __NR_listmount 458
102#endif
103
104#ifndef __NR_statmount
105#define __NR_statmount 457
106#endif
107
108#ifndef LSMT_ROOT
109#define LSMT_ROOT		0xffffffffffffffff	/* root mount */
110#endif
111
112/* @mask bits for statmount(2) */
113#ifndef STATMOUNT_SB_BASIC
114#define STATMOUNT_SB_BASIC		0x00000001U /* Want/got sb_... */
115#endif
116
117#ifndef STATMOUNT_MNT_BASIC
118#define STATMOUNT_MNT_BASIC		0x00000002U /* Want/got mnt_... */
119#endif
120
121#ifndef STATMOUNT_PROPAGATE_FROM
122#define STATMOUNT_PROPAGATE_FROM	0x00000004U /* Want/got propagate_from */
123#endif
124
125#ifndef STATMOUNT_MNT_ROOT
126#define STATMOUNT_MNT_ROOT		0x00000008U /* Want/got mnt_root  */
127#endif
128
129#ifndef STATMOUNT_MNT_POINT
130#define STATMOUNT_MNT_POINT		0x00000010U /* Want/got mnt_point */
131#endif
132
133#ifndef STATMOUNT_FS_TYPE
134#define STATMOUNT_FS_TYPE		0x00000020U /* Want/got fs_type */
135#endif
136
137#ifndef STATMOUNT_MNT_NS_ID
138#define STATMOUNT_MNT_NS_ID		0x00000040U /* Want/got mnt_ns_id */
139#endif
140
141#ifndef STATMOUNT_MNT_OPTS
142#define STATMOUNT_MNT_OPTS		0x00000080U /* Want/got mnt_opts */
143#endif
144
145#ifndef STATMOUNT_FS_SUBTYPE
146#define STATMOUNT_FS_SUBTYPE		0x00000100U /* Want/got fs_subtype */
147#endif
148
149#ifndef STATMOUNT_SB_SOURCE
150#define STATMOUNT_SB_SOURCE		0x00000200U /* Want/got sb_source */
151#endif
152
153#ifndef STATMOUNT_OPT_ARRAY
154#define STATMOUNT_OPT_ARRAY		0x00000400U /* Want/got opt_... */
155#endif
156
157#ifndef STATMOUNT_OPT_SEC_ARRAY
158#define STATMOUNT_OPT_SEC_ARRAY		0x00000800U /* Want/got opt_sec... */
159#endif
160
161#ifndef STATX_MNT_ID_UNIQUE
162#define STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */
163#endif
164
165#ifndef STATMOUNT_MNT_UIDMAP
166#define STATMOUNT_MNT_UIDMAP		0x00002000U	/* Want/got uidmap... */
167#endif
168
169#ifndef STATMOUNT_MNT_GIDMAP
170#define STATMOUNT_MNT_GIDMAP		0x00004000U	/* Want/got gidmap... */
171#endif
172
173#ifndef MOUNT_ATTR_RDONLY
174#define MOUNT_ATTR_RDONLY	0x00000001 /* Mount read-only */
175#endif
176
177#ifndef MOUNT_ATTR_NOSUID
178#define MOUNT_ATTR_NOSUID	0x00000002 /* Ignore suid and sgid bits */
179#endif
180
181#ifndef MOUNT_ATTR_NODEV
182#define MOUNT_ATTR_NODEV	0x00000004 /* Disallow access to device special files */
183#endif
184
185#ifndef MOUNT_ATTR_NOEXEC
186#define MOUNT_ATTR_NOEXEC	0x00000008 /* Disallow program execution */
187#endif
188
189#ifndef MOUNT_ATTR__ATIME
190#define MOUNT_ATTR__ATIME	0x00000070 /* Setting on how atime should be updated */
191#endif
192
193#ifndef MOUNT_ATTR_RELATIME
194#define MOUNT_ATTR_RELATIME	0x00000000 /* - Update atime relative to mtime/ctime. */
195#endif
196
197#ifndef MOUNT_ATTR_NOATIME
198#define MOUNT_ATTR_NOATIME	0x00000010 /* - Do not update access times. */
199#endif
200
201#ifndef MOUNT_ATTR_STRICTATIME
202#define MOUNT_ATTR_STRICTATIME	0x00000020 /* - Always perform atime updates */
203#endif
204
205#ifndef MOUNT_ATTR_NODIRATIME
206#define MOUNT_ATTR_NODIRATIME	0x00000080 /* Do not update directory access times */
207#endif
208
209#ifndef MOUNT_ATTR_IDMAP
210#define MOUNT_ATTR_IDMAP	0x00100000 /* Idmap mount to @userns_fd in struct mount_attr. */
211#endif
212
213#ifndef MOUNT_ATTR_NOSYMFOLLOW
214#define MOUNT_ATTR_NOSYMFOLLOW	0x00200000 /* Do not follow symlinks */
215#endif
216
217#ifndef MS_RDONLY
218#define MS_RDONLY	 1	/* Mount read-only */
219#endif
220
221#ifndef MS_SYNCHRONOUS
222#define MS_SYNCHRONOUS	16	/* Writes are synced at once */
223#endif
224
225#ifndef MS_MANDLOCK
226#define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */
227#endif
228
229#ifndef MS_DIRSYNC
230#define MS_DIRSYNC	128	/* Directory modifications are synchronous */
231#endif
232
233#ifndef MS_UNBINDABLE
234#define MS_UNBINDABLE	(1<<17)	/* change to unbindable */
235#endif
236
237#ifndef MS_PRIVATE
238#define MS_PRIVATE	(1<<18)	/* change to private */
239#endif
240
241#ifndef MS_SLAVE
242#define MS_SLAVE	(1<<19)	/* change to slave */
243#endif
244
245#ifndef MS_SHARED
246#define MS_SHARED	(1<<20)	/* change to shared */
247#endif
248
249#ifndef MS_LAZYTIME
250#define MS_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */
251#endif
252
253#endif /* __SAMPLES_VFS_H */
~/ Read-only file preview.