All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] btrfs-progs: mkfs/rootdir: Don't follow symbolic link when calcuating size
@ 2018-03-28  6:39 Qu Wenruo
  2018-03-28 14:55 ` David Sterba
  0 siblings, 1 reply; 3+ messages in thread
From: Qu Wenruo @ 2018-03-28  6:39 UTC (permalink / raw)
  To: linux-btrfs

[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(-)

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));
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] btrfs-progs: mkfs/rootdir: Don't follow symbolic link when calcuating size
  2018-03-28  6:39 [PATCH] btrfs-progs: mkfs/rootdir: Don't follow symbolic link when calcuating size Qu Wenruo
@ 2018-03-28 14:55 ` David Sterba
  2018-03-29  1:09   ` Qu Wenruo
  0 siblings, 1 reply; 3+ messages in thread
From: David Sterba @ 2018-03-28 14:55 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-btrfs

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?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] btrfs-progs: mkfs/rootdir: Don't follow symbolic link when calcuating size
  2018-03-28 14:55 ` David Sterba
@ 2018-03-29  1:09   ` Qu Wenruo
  0 siblings, 0 replies; 3+ messages in thread
From: Qu Wenruo @ 2018-03-29  1:09 UTC (permalink / raw)
  To: dsterba, linux-btrfs


[-- Attachment #1.1: Type: text/plain, Size: 1225 bytes --]



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


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-03-29  1:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-28  6:39 [PATCH] btrfs-progs: mkfs/rootdir: Don't follow symbolic link when calcuating size Qu Wenruo
2018-03-28 14:55 ` David Sterba
2018-03-29  1:09   ` Qu Wenruo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.