summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChandan Rajendra <chandan@linux.vnet.ibm.com>2015-12-15 15:32:00 +0530
committerDavid Sterba <dsterba@suse.com>2016-01-12 15:01:04 +0100
commitf0eae29843a95cb10d9c5f8c03f77e6b74eda656 (patch)
tree50620570ba1f809b877f2a9606ed7f6e6eb2d435
parent5a657cad467a601bbef49b0ab79f30cd23a53dfe (diff)
btrfs-progs: ftw_add_entry_size: Round up file size to sectorsize
ftw_add_entry_size() assumes 4k as the block size of the underlying filesystem and hence the file sizes computed is incorrect for non-4k sectorsized filesystems. Fix this by rounding up file sizes to sectorsize. Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--mkfs.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/mkfs.c b/mkfs.c
index c58ab2f4..88c22891 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -1031,16 +1031,15 @@ out:
* This ignores symlinks with unreadable targets and subdirs that can't
* be read. It's a best-effort to give a rough estimate of the size of
* a subdir. It doesn't guarantee that prepopulating btrfs from this
- * tree won't still run out of space.
- *
- * The rounding up to 4096 is questionable. Previous code used du -B 4096.
+ * tree won't still run out of space.
*/
static u64 global_total_size;
+static u64 fs_block_size;
static int ftw_add_entry_size(const char *fpath, const struct stat *st,
int type)
{
if (type == FTW_F || type == FTW_D)
- global_total_size += round_up(st->st_size, 4096);
+ global_total_size += round_up(st->st_size, fs_block_size);
return 0;
}
@@ -1060,6 +1059,7 @@ static u64 size_sourcedir(char *dir_name, u64 sectorsize,
allocated_meta_size / default_chunk_size;
global_total_size = 0;
+ fs_block_size = sectorsize;
ret = ftw(dir_name, ftw_add_entry_size, 10);
dir_size = global_total_size;
if (ret < 0) {