From: Marcos Paulo de Souza <marcos@mpdesouza.com>
To: dsterba@suse.com, linux-btrfs@vger.kernel.org, wqu@suse.com
Cc: Marcos Paulo de Souza <mpdesouza@suse.com>
Subject: [PATCH] btrfs-progs: convert: Mention which reserve_space call failed
Date: Wed, 23 Sep 2020 14:14:05 -0300 [thread overview]
Message-ID: <20200923171405.17456-1-marcos@mpdesouza.com> (raw)
From: Marcos Paulo de Souza <mpdesouza@suse.com>
btrfs-convert currently can't handle more fragmented block groups when
converting ext4 because the minimum size of a data chunk is 32Mb.
When converting an ext4 fs with more fragmented block group and the disk
almost full, we can end up hitting a ENOSPC problem [1] since smaller
block groups (10Mb for example) end up being extended to 32Mb, leaving
the free space tree smaller when converting it to btrfs.
This patch adds error messages telling which needed bytes couldn't be
allocated from the free space tree:
create btrfs filesystem:
blocksize: 4096
nodesize: 16384
features: extref, skinny-metadata (default)
checksum: crc32c
free space report:
total: 1073741824
free: 39124992 (3.64%)
ERROR: failed to reserve 33554432 bytes from free space for metadata chunk
ERROR: unable to create initial ctree: No space left on device
Link: https://github.com/kdave/btrfs-progs/issues/251
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
convert/common.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/convert/common.c b/convert/common.c
index 048629df..6392e7f4 100644
--- a/convert/common.c
+++ b/convert/common.c
@@ -812,8 +812,10 @@ int make_convert_btrfs(int fd, struct btrfs_mkfs_config *cfg,
*/
ret = reserve_free_space(free_space, BTRFS_STRIPE_LEN,
&cfg->super_bytenr);
- if (ret < 0)
+ if (ret < 0) {
+ error("failed to reserve %d bytes from free space for temporary superblock", BTRFS_STRIPE_LEN);
goto out;
+ }
/*
* Then reserve system chunk space
@@ -823,12 +825,16 @@ int make_convert_btrfs(int fd, struct btrfs_mkfs_config *cfg,
*/
ret = reserve_free_space(free_space, BTRFS_MKFS_SYSTEM_GROUP_SIZE,
&sys_chunk_start);
- if (ret < 0)
+ if (ret < 0) {
+ error("failed to reserve %d bytes from free space for system chunk", BTRFS_MKFS_SYSTEM_GROUP_SIZE);
goto out;
+ }
ret = reserve_free_space(free_space, BTRFS_CONVERT_META_GROUP_SIZE,
&meta_chunk_start);
- if (ret < 0)
+ if (ret < 0) {
+ error("failed to reserve %d bytes from free space for metadata chunk", BTRFS_CONVERT_META_GROUP_SIZE);
goto out;
+ }
/*
* Allocated meta/sys chunks will be mapped 1:1 with device offset.
--
2.28.0
next reply other threads:[~2020-09-23 17:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-23 17:14 Marcos Paulo de Souza [this message]
2020-09-23 22:18 ` [PATCH] btrfs-progs: convert: Mention which reserve_space call failed Neal Gompa
2020-09-24 0:08 ` Qu Wenruo
2020-09-24 11:54 ` Marcos Paulo de Souza
2020-09-24 12:19 ` Qu Wenruo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200923171405.17456-1-marcos@mpdesouza.com \
--to=marcos@mpdesouza.com \
--cc=dsterba@suse.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=mpdesouza@suse.com \
--cc=wqu@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox