unix: add MoveMount syscall on linux

This syscall is not yet described in linux man pages
(https://github.com/mkerrisk/man-pages.git),
but it was submitted to lkml https://lwn.net/Articles/802095/
This syscall appeared in linux v5.2.

Change-Id: I0708bfceda8d7a7608d0d0e75e36c3d81302dedb
Reviewed-on: https://go-review.googlesource.com/c/sys/+/397095
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
diff --git a/unix/linux/types.go b/unix/linux/types.go
index c8d176e..80260db 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -905,6 +905,14 @@
 
 	OPEN_TREE_CLONE   = C.OPEN_TREE_CLONE
 	OPEN_TREE_CLOEXEC = C.OPEN_TREE_CLOEXEC
+
+	MOVE_MOUNT_F_SYMLINKS   = C.MOVE_MOUNT_F_SYMLINKS
+	MOVE_MOUNT_F_AUTOMOUNTS = C.MOVE_MOUNT_F_AUTOMOUNTS
+	MOVE_MOUNT_F_EMPTY_PATH = C.MOVE_MOUNT_F_EMPTY_PATH
+	MOVE_MOUNT_T_SYMLINKS   = C.MOVE_MOUNT_T_SYMLINKS
+	MOVE_MOUNT_T_AUTOMOUNTS = C.MOVE_MOUNT_T_AUTOMOUNTS
+	MOVE_MOUNT_T_EMPTY_PATH = C.MOVE_MOUNT_T_EMPTY_PATH
+	MOVE_MOUNT_SET_GROUP    = C.MOVE_MOUNT_SET_GROUP
 )
 
 type OpenHow C.struct_open_how
diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go
index 298323e..eeae6db 100644
--- a/unix/syscall_linux.go
+++ b/unix/syscall_linux.go
@@ -1859,6 +1859,7 @@
 //sys	MemfdCreate(name string, flags int) (fd int, err error)
 //sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
 //sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
+//sys	MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error)
 //sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
 //sys	OpenTree(dfd int, fileName string, flags uint) (r int, err error)
 //sys	PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
diff --git a/unix/zsyscall_linux.go b/unix/zsyscall_linux.go
index ca65ac8..198b4ac 100644
--- a/unix/zsyscall_linux.go
+++ b/unix/zsyscall_linux.go
@@ -1205,6 +1205,26 @@
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) {
+	var _p0 *byte
+	_p0, err = BytePtrFromString(fromPathName)
+	if err != nil {
+		return
+	}
+	var _p1 *byte
+	_p1, err = BytePtrFromString(toPathName)
+	if err != nil {
+		return
+	}
+	_, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+	if e1 != 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
 	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
 	if e1 != 0 {
diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go
index e61891d..97f6aa6 100644
--- a/unix/ztypes_linux.go
+++ b/unix/ztypes_linux.go
@@ -756,6 +756,14 @@
 	AT_EACCESS = 0x200
 
 	OPEN_TREE_CLONE = 0x1
+
+	MOVE_MOUNT_F_SYMLINKS   = 0x1
+	MOVE_MOUNT_F_AUTOMOUNTS = 0x2
+	MOVE_MOUNT_F_EMPTY_PATH = 0x4
+	MOVE_MOUNT_T_SYMLINKS   = 0x10
+	MOVE_MOUNT_T_AUTOMOUNTS = 0x20
+	MOVE_MOUNT_T_EMPTY_PATH = 0x40
+	MOVE_MOUNT_SET_GROUP    = 0x100
 )
 
 type OpenHow struct {