Re: [PATCH v9 1/4] generic/631: add test for detached mount propagation

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Thu, Mar 18, 2021 at 04:14:44PM +0100, Christian Brauner wrote:
> On Thu, Mar 18, 2021 at 08:02:30AM -0700, Darrick J. Wong wrote:
> > On Thu, Mar 18, 2021 at 07:23:10AM +0100, Christoph Hellwig wrote:
> > > > +/* open_tree() */
> > > > +#ifndef OPEN_TREE_CLONE
> > > > +#define OPEN_TREE_CLONE 1
> > > > +#endif
> > > > +
> > > > +#ifndef OPEN_TREE_CLOEXEC
> > > > +#define OPEN_TREE_CLOEXEC O_CLOEXEC
> > > > +#endif
> > > > +
> > > > +#ifndef __NR_open_tree
> > > > +	#if defined __alpha__
> > > > +		#define __NR_open_tree 538
> > > > +	#elif defined _MIPS_SIM
> > > > +		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
> > > > +			#define __NR_open_tree 4428
> > > > +		#endif
> > > > +		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
> > > > +			#define __NR_open_tree 6428
> > > > +		#endif
> > > > +		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
> > > > +			#define __NR_open_tree 5428
> > > > +		#endif
> > > > +	#elif defined __ia64__
> > > > +		#define __NR_open_tree (428 + 1024)
> > > > +	#else
> > > > +		#define __NR_open_tree 428
> > > > +	#endif
> > > > +#endif
> > > > +
> > > > +/* move_mount() */
> > > > +#ifndef MOVE_MOUNT_F_EMPTY_PATH
> > > > +#define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */
> > > > +#endif
> > > > +
> > > > +#ifndef __NR_move_mount
> > > > +	#if defined __alpha__
> > > > +		#define __NR_move_mount 539
> > > > +	#elif defined _MIPS_SIM
> > > > +		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
> > > > +			#define __NR_move_mount 4429
> > > > +		#endif
> > > > +		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
> > > > +			#define __NR_move_mount 6429
> > > > +		#endif
> > > > +		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
> > > > +			#define __NR_move_mount 5429
> > > > +		#endif
> > > > +	#elif defined __ia64__
> > > > +		#define __NR_move_mount (428 + 1024)
> > > > +	#else
> > > > +		#define __NR_move_mount 429
> > > > +	#endif
> > > > +#endif
> > > > +
> > > > +static inline int sys_open_tree(int dfd, const char *filename, unsigned int flags)
> > > > +{
> > > > +	return syscall(__NR_open_tree, dfd, filename, flags);
> > > > +}
> > > > +
> > > > +static inline int sys_move_mount(int from_dfd, const char *from_pathname, int to_dfd,
> > > > +				 const char *to_pathname, unsigned int flags)
> > > > +{
> > > > +	return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags);
> > > > +}
> > > 
> > > Not directly new in your patch, but I wish we'd have a central header
> > > for missing UAPI bits in xfstests instead of spreading it over
> > > various files.
> > 
> > FWIW if you (or anyone else) /does/ create a src/linux_calls.h or
> > similar for things like this, I will totally start adding things to it
> > instead of scattering them everywhere. :)
> 
> I do usually have in my C projects two .h files (without corresponding
> .c files):
> 
> 1. syscall_numbers.h
>    https://github.com/lxc/lxc/blob/master/src/lxc/syscall_numbers.h
> 
>    Where syscall_numbers defines the missing syscall numbers. For new
>    syscalls in the style exhibited in this patch and for legacy syscalls
>    it's a bit more nasty (i.e. syscalls before we unified numbering [apart
>    from alpha]):
>    
> #ifndef __NR_memfd_create
> 	#if defined __i386__
> 		#define __NR_memfd_create 356
> 	#elif defined __x86_64__
> 		#define __NR_memfd_create 319
> 	#elif defined __arm__
> 		#define __NR_memfd_create 385
> 	#elif defined __aarch64__
> 		#define __NR_memfd_create 279
> 	#elif defined __s390__
> 		#define __NR_memfd_create 350
> 	#elif defined __powerpc__
> 		#define __NR_memfd_create 360
> 	#elif defined __riscv
> 		#define __NR_memfd_create 279
> 	#elif defined __sparc__
> 		#define __NR_memfd_create 348
> 	#elif defined __blackfin__
> 		#define __NR_memfd_create 390
> 	#elif defined __ia64__
> 		#define __NR_memfd_create 1340
> 	#elif defined _MIPS_SIM
> 		#if _MIPS_SIM == _MIPS_SIM_ABI32
> 			#define __NR_memfd_create 4354
> 		#endif
> 		#if _MIPS_SIM == _MIPS_SIM_NABI32
> 			#define __NR_memfd_create 6318
> 		#endif
> 		#if _MIPS_SIM == _MIPS_SIM_ABI64
> 			#define __NR_memfd_create 5314
> 		#endif
> 	#else
> 		#define -1
> 		#warning "__NR_memfd_create not defined for your architecture"
> 	#endif
> #endif
> 
> 2. syscall_wrappers.h
>    https://github.com/lxc/lxc/blob/master/src/lxc/syscall_wrappers.h
> 
>    Where syscall_wrappers.h defines minimal wrappers for missing
>    syscalls and their corresponding types.
> 
> #ifndef HAVE_SYS_SIGNALFD_H
> struct signalfd_siginfo {
> 	uint32_t ssi_signo;
> 	int32_t ssi_errno;
> 	int32_t ssi_code;
> 	uint32_t ssi_pid;
> 	uint32_t ssi_uid;
> 	int32_t ssi_fd;
> 	uint32_t ssi_tid;
> 	uint32_t ssi_band;
> 	uint32_t ssi_overrun;
> 	uint32_t ssi_trapno;
> 	int32_t ssi_status;
> 	int32_t ssi_int;
> 	uint64_t ssi_ptr;
> 	uint64_t ssi_utime;
> 	uint64_t ssi_stime;
> 	uint64_t ssi_addr;
> 	uint8_t __pad[48];
> };
> 
> static inline int signalfd(int fd, const sigset_t *mask, int flags)
> {
> 	int retval;
> 
> 	retval = syscall(__NR_signalfd4, fd, mask, _NSIG / 8, flags);
> #ifdef __NR_signalfd
> 	if (errno == ENOSYS && flags == 0)
> 		retval = syscall(__NR_signalfd, fd, mask, _NSIG / 8);
> #endif
> 
> 	return retval;
> }
> #endif
> 
> Something like this might also work for xfstests.

Yeah, not 5 minutes later someone emailed me a bug report that fstests
doesn't build on Ubuntu 16.04 due to its kernel headers not knowing
about fsxattr, so I guess I'll have a patch out adding this exact header
file later today.

--D

> 
> Christian



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux