Message ID | 20180328063909.937-1-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Mar 28, 2018 at 02:39:09PM +0800, Qu Wenruo wrote: > [BUG] > If we have a symbolic link in rootdir pointing to non-existing location, > mkfs.btrfs --rootdir will just fail: > ------ > $ mkfs.btrfs -f --rootdir /tmp/rootdir/ /dev/data/btrfs > btrfs-progs v4.15.1 > See http://btrfs.wiki.kernel.org for more information. > > ERROR: ftw subdir walk of /tmp/rootdir/ failed: No such file or directory > ------ > > [CAUSE] > Commit 599a0abed564 ("btrfs-progs: mkfs/rootdir: Use over-reserve method > to make size estimate easier") add extra ftw walk to estimate the > filesystem size. > > Such default ftw walk will follow symbolic link and gives ENOENT error. > > [FIX] > Use nftw() to specify FTW_PHYS so we won't follow symbolic link for size > calculation. > > Reported-by: Alexander Kanavin <alexander.kanavin@intel.com> > Fixes: 599a0abed564 ("btrfs-progs: mkfs/rootdir: Use over-reserve method to make size estimate easier") > Signed-off-by: Qu Wenruo <wqu@suse.com> Applied, thanks. Can you please write a testcase for that? -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2018年03月28日 22:55, David Sterba wrote: > On Wed, Mar 28, 2018 at 02:39:09PM +0800, Qu Wenruo wrote: >> [BUG] >> If we have a symbolic link in rootdir pointing to non-existing location, >> mkfs.btrfs --rootdir will just fail: >> ------ >> $ mkfs.btrfs -f --rootdir /tmp/rootdir/ /dev/data/btrfs >> btrfs-progs v4.15.1 >> See http://btrfs.wiki.kernel.org for more information. >> >> ERROR: ftw subdir walk of /tmp/rootdir/ failed: No such file or directory >> ------ >> >> [CAUSE] >> Commit 599a0abed564 ("btrfs-progs: mkfs/rootdir: Use over-reserve method >> to make size estimate easier") add extra ftw walk to estimate the >> filesystem size. >> >> Such default ftw walk will follow symbolic link and gives ENOENT error. >> >> [FIX] >> Use nftw() to specify FTW_PHYS so we won't follow symbolic link for size >> calculation. >> >> Reported-by: Alexander Kanavin <alexander.kanavin@intel.com> >> Fixes: 599a0abed564 ("btrfs-progs: mkfs/rootdir: Use over-reserve method to make size estimate easier") >> Signed-off-by: Qu Wenruo <wqu@suse.com> > > Applied, thanks. Can you please write a testcase for that? > Sorry, I planned but forgot that. Will come soon. Thanks, Qu
diff --git a/mkfs/rootdir.c b/mkfs/rootdir.c index a1d223a2408a..33c3ff1e18cf 100644 --- a/mkfs/rootdir.c +++ b/mkfs/rootdir.c @@ -696,7 +696,7 @@ out: } static int ftw_add_entry_size(const char *fpath, const struct stat *st, - int type) + int type, struct FTW *ftwbuf) { /* * Failed to read the directory, mostly due to EPERM. Abort ASAP, so @@ -731,7 +731,12 @@ u64 btrfs_mkfs_size_dir(const char *dir_name, u32 sectorsize, u64 min_dev_size, fs_block_size = sectorsize; ftw_data_size = 0; ftw_meta_nr_inode = 0; - ret = ftw(dir_name, ftw_add_entry_size, 10); + + /* + * Symbolic link is not followed when creating files, so no need to + * follow them here. + */ + ret = nftw(dir_name, ftw_add_entry_size, 10, FTW_PHYS); if (ret < 0) { error("ftw subdir walk of %s failed: %s", dir_name, strerror(errno));
[BUG] If we have a symbolic link in rootdir pointing to non-existing location, mkfs.btrfs --rootdir will just fail: ------ $ mkfs.btrfs -f --rootdir /tmp/rootdir/ /dev/data/btrfs btrfs-progs v4.15.1 See http://btrfs.wiki.kernel.org for more information. ERROR: ftw subdir walk of /tmp/rootdir/ failed: No such file or directory ------ [CAUSE] Commit 599a0abed564 ("btrfs-progs: mkfs/rootdir: Use over-reserve method to make size estimate easier") add extra ftw walk to estimate the filesystem size. Such default ftw walk will follow symbolic link and gives ENOENT error. [FIX] Use nftw() to specify FTW_PHYS so we won't follow symbolic link for size calculation. Reported-by: Alexander Kanavin <alexander.kanavin@intel.com> Fixes: 599a0abed564 ("btrfs-progs: mkfs/rootdir: Use over-reserve method to make size estimate easier") Signed-off-by: Qu Wenruo <wqu@suse.com> --- mkfs/rootdir.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)