1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #ifndef __STATMOUNT_H
4 #define __STATMOUNT_H
5 
6 #include <stdint.h>
7 #include <linux/mount.h>
8 #include <asm/unistd.h>
9 
10 #ifndef __NR_statmount
11 	#if defined __alpha__
12 		#define __NR_statmount 567
13 	#elif defined _MIPS_SIM
14 		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
15 			#define __NR_statmount 4457
16 		#endif
17 		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
18 			#define __NR_statmount 6457
19 		#endif
20 		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
21 			#define __NR_statmount 5457
22 		#endif
23 	#else
24 		#define __NR_statmount 457
25 	#endif
26 #endif
27 
28 #ifndef __NR_listmount
29 	#if defined __alpha__
30 		#define __NR_listmount 568
31 	#elif defined _MIPS_SIM
32 		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
33 			#define __NR_listmount 4458
34 		#endif
35 		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
36 			#define __NR_listmount 6458
37 		#endif
38 		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
39 			#define __NR_listmount 5458
40 		#endif
41 	#else
42 		#define __NR_listmount 458
43 	#endif
44 #endif
45 
statmount(uint64_t mnt_id,uint64_t mnt_ns_id,uint64_t mask,struct statmount * buf,size_t bufsize,unsigned int flags)46 static inline int statmount(uint64_t mnt_id, uint64_t mnt_ns_id, uint64_t mask,
47 			    struct statmount *buf, size_t bufsize,
48 			    unsigned int flags)
49 {
50 	struct mnt_id_req req = {
51 		.size = MNT_ID_REQ_SIZE_VER0,
52 		.mnt_id = mnt_id,
53 		.param = mask,
54 	};
55 
56 	if (mnt_ns_id) {
57 		req.size = MNT_ID_REQ_SIZE_VER1;
58 		req.mnt_ns_id = mnt_ns_id;
59 	}
60 
61 	return syscall(__NR_statmount, &req, buf, bufsize, flags);
62 }
63 
listmount(uint64_t mnt_id,uint64_t mnt_ns_id,uint64_t last_mnt_id,uint64_t list[],size_t num,unsigned int flags)64 static inline ssize_t listmount(uint64_t mnt_id, uint64_t mnt_ns_id,
65 			 uint64_t last_mnt_id, uint64_t list[], size_t num,
66 			 unsigned int flags)
67 {
68 	struct mnt_id_req req = {
69 		.size = MNT_ID_REQ_SIZE_VER0,
70 		.mnt_id = mnt_id,
71 		.param = last_mnt_id,
72 	};
73 
74 	if (mnt_ns_id) {
75 		req.size = MNT_ID_REQ_SIZE_VER1;
76 		req.mnt_ns_id = mnt_ns_id;
77 	}
78 
79 	return syscall(__NR_listmount, &req, list, num, flags);
80 }
81 
82 #endif /* __STATMOUNT_H */
83