@@ -1829,4 +1829,53 @@ TEST_F(mount_setattr, mount_detached_mount_on_detached_mount_then_close)
18291829 EXPECT_EQ (close (fd_tree_subdir ), 0 );
18301830}
18311831
1832+ TEST_F (mount_setattr , mount_detached_mount_on_detached_mount_and_attach )
1833+ {
1834+ int fd_tree_base = - EBADF , fd_tree_subdir = - EBADF ;
1835+ struct statx stx ;
1836+ __u64 mnt_id = 0 ;
1837+
1838+ fd_tree_base = sys_open_tree (- EBADF , "/mnt" ,
1839+ AT_NO_AUTOMOUNT | AT_SYMLINK_NOFOLLOW |
1840+ OPEN_TREE_CLOEXEC | OPEN_TREE_CLONE );
1841+ ASSERT_GE (fd_tree_base , 0 );
1842+ /*
1843+ * /mnt testing tmpfs
1844+ */
1845+ ASSERT_EQ (statx (fd_tree_base , "A" , 0 , 0 , & stx ), 0 );
1846+ ASSERT_FALSE (stx .stx_attributes & STATX_ATTR_MOUNT_ROOT );
1847+
1848+ fd_tree_subdir = sys_open_tree (fd_tree_base , "" ,
1849+ AT_NO_AUTOMOUNT | AT_SYMLINK_NOFOLLOW |
1850+ AT_EMPTY_PATH | OPEN_TREE_CLOEXEC |
1851+ OPEN_TREE_CLONE );
1852+ ASSERT_GE (fd_tree_subdir , 0 );
1853+ /*
1854+ * /mnt testing tmpfs
1855+ */
1856+ ASSERT_EQ (statx (fd_tree_subdir , "A" , 0 , 0 , & stx ), 0 );
1857+ ASSERT_FALSE (stx .stx_attributes & STATX_ATTR_MOUNT_ROOT );
1858+
1859+ /*
1860+ * /mnt testing tmpfs
1861+ * `-/mnt testing tmpfs
1862+ */
1863+ ASSERT_EQ (move_mount (fd_tree_subdir , "" , fd_tree_base , "" , MOVE_MOUNT_F_EMPTY_PATH | MOVE_MOUNT_T_EMPTY_PATH ), 0 );
1864+ ASSERT_EQ (statx (fd_tree_subdir , "" , AT_EMPTY_PATH , STATX_MNT_ID_UNIQUE , & stx ), 0 );
1865+ ASSERT_TRUE (stx .stx_attributes & STATX_ATTR_MOUNT_ROOT );
1866+ ASSERT_TRUE (stx .stx_mask & STATX_MNT_ID_UNIQUE );
1867+ mnt_id = stx .stx_mnt_id ;
1868+
1869+ ASSERT_NE (move_mount (fd_tree_subdir , "" , fd_tree_base , "" , MOVE_MOUNT_F_EMPTY_PATH | MOVE_MOUNT_T_EMPTY_PATH ), 0 );
1870+
1871+ ASSERT_EQ (move_mount (fd_tree_base , "" , - EBADF , "/tmp/target1" , MOVE_MOUNT_F_EMPTY_PATH ), 0 );
1872+ ASSERT_EQ (statx (- EBADF , "/tmp/target1" , 0 , STATX_MNT_ID_UNIQUE , & stx ), 0 );
1873+ ASSERT_TRUE (stx .stx_attributes & STATX_ATTR_MOUNT_ROOT );
1874+ ASSERT_TRUE (stx .stx_mask & STATX_MNT_ID_UNIQUE );
1875+ ASSERT_EQ (stx .stx_mnt_id , mnt_id );
1876+
1877+ EXPECT_EQ (close (fd_tree_base ), 0 );
1878+ EXPECT_EQ (close (fd_tree_subdir ), 0 );
1879+ }
1880+
18321881TEST_HARNESS_MAIN
0 commit comments