Messages in this thread | | | From | "zhangyi (F)" <> | Subject | [QUESTION] question about the errno of rename the parent dir to a subdir of a specified directory | Date | Wed, 25 Dec 2019 21:16:09 +0800 |
| |
Hi,
If we rename the parent-dir to a sub-dir of a specified directory, the rename() syscall return -EINVAL because lock_rename() in lock_rename() checks the relations of the sorece and dest dirs. But if the 'parent' dir is a mountpoint, the rename() syscall return -EXDEV instead because it checks the parent dir's mountpoint of the sorece and dest dirs.
For example: Case 1: rename() return -EINVAL # mkdir -p parent/dir # rename parent parent/dir/subdir parent rename: parent: rename to parent/dir/subdir failed: Invalid argument
Case 2: rename() return -EXDEV # mkdir parent # mount -t tmpfs test parent # mkdir parent/dir # rename parent parent/dir/subdir parent rename: parent: rename to parent/dir/subdir failed: Invalid cross-device link
In case 2, although 'parent' directory is a mountpoint, it acted as a root dir of the "test tmpfs", so it should belongs to the same mounted fs of 'dir' directoty, so I think it shall return -EINVAL.
Is it a bug or just designed as this ?
Thanks, Yi.
| |