[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <4c54c1f0-fe9a-6dea-1727-6898e8dd85ef@huawei.com>
Date: Wed, 25 Dec 2019 21:16:09 +0800
From: "zhangyi (F)" <yi.zhang@...wei.com>
To: <viro@...iv.linux.org.uk>, <linux-fsdevel@...r.kernel.org>
CC: <linux-kernel@...r.kernel.org>, <miaoxie@...wei.com>,
<zhangtianci1@...wei.com>
Subject: [QUESTION] question about the errno of rename the parent dir to a
subdir of a specified directory
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.
Powered by blists - more mailing lists