Message ID | 1348801360-1851-2-git-send-email-robin.k.dong@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Sep 28, 2012 at 11:02:40AM +0800, Robin Dong wrote: > From: Robin Dong <sanbai@taobao.com> > > Using mkfs.btrfs like: > > mkfs.btrfs -b 1048576 /dev/sda > > will report error: > > mkfs.btrfs: volumes.c:796: btrfs_alloc_chunk: Assertion `!(ret)' failed. > Aborted > > because the length of dev_extent is 4MB. > > But if we use mkfs.btrfs with 8MB total bytes, the newly mounted btrfs filesystem > would not contain even one empty file. So 12MB will be good min-value for block_count. I'm not able to create a single file even on a 12MB filesystem (with -d single -m single --mixed), so any limit that would let the mkfs finish normally should be fine. For the single/single case it's 5MB but for the dup/dup it's 156MB. It's due to the known bug in the blockgroup creation with multiple devices (applies on dup as well here) that leads to: # btrfs fi df . System, DUP: total=8.00MB, used=4.00KB System: total=4.00MB, used=0.00 Data+Metadata, DUP: total=64.00MB, used=24.00KB Data+Metadata: total=8.00MB, used=0.00 8*2 + 4 + 64*2 + 8 = 156 so, 12M is too small to avoid the mkfs crash. david -- 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
2012/10/1 David Sterba <dave@jikos.cz>: > On Fri, Sep 28, 2012 at 11:02:40AM +0800, Robin Dong wrote: >> From: Robin Dong <sanbai@taobao.com> >> >> Using mkfs.btrfs like: >> >> mkfs.btrfs -b 1048576 /dev/sda >> >> will report error: >> >> mkfs.btrfs: volumes.c:796: btrfs_alloc_chunk: Assertion `!(ret)' failed. >> Aborted >> >> because the length of dev_extent is 4MB. >> >> But if we use mkfs.btrfs with 8MB total bytes, the newly mounted btrfs filesystem >> would not contain even one empty file. So 12MB will be good min-value for block_count. > > I'm not able to create a single file even on a 12MB filesystem > (with -d single -m single --mixed), so any limit that would let the mkfs > finish normally should be fine. For the single/single case it's 5MB but > for the dup/dup it's 156MB. It's due to the known bug in the blockgroup > creation with multiple devices (applies on dup as well here) that leads > to: > > # btrfs fi df . > System, DUP: total=8.00MB, used=4.00KB > System: total=4.00MB, used=0.00 > Data+Metadata, DUP: total=64.00MB, used=24.00KB > Data+Metadata: total=8.00MB, used=0.00 > > 8*2 + 4 + 64*2 + 8 = 156 > > so, 12M is too small to avoid the mkfs crash. Thanks for your notice! > > david
diff --git a/mkfs.c b/mkfs.c index 8420482..496faa8 100644 --- a/mkfs.c +++ b/mkfs.c @@ -1345,7 +1345,11 @@ int main(int ac, char **av) &dev_block_count, &mixed, nodiscard); if (block_count == 0) block_count = dev_block_count; - else if (block_count > dev_block_count) { + else if (block_count < 3 * BTRFS_MKFS_SYSTEM_GROUP_SIZE) { + fprintf(stderr, "Illegal total number of bytes %u\n", + block_count); + exit(1); + } else if (block_count > dev_block_count) { fprintf(stderr, "%s is smaller than requested size\n", file); exit(1); }