841295d9e4
- fix mkfs failure on ppc64 (or with sectorsize > 4k) OBS-URL: https://build.opensuse.org/request/show/346049 OBS-URL: https://build.opensuse.org/package/show/filesystems/btrfsprogs?expand=0&rev=223
42 lines
1.4 KiB
Diff
42 lines
1.4 KiB
Diff
From bf1ac8305ab3f191d9345793b88c4f5ec691cb9b Mon Sep 17 00:00:00 2001
|
|
From: David Sterba <dsterba@suse.com>
|
|
Date: Thu, 19 Nov 2015 15:55:05 +0100
|
|
Subject: [PATCH] btrfs-progs: mkfs: use correct size for superblock csum and
|
|
writeout
|
|
|
|
If sectorsize is not BTRFS_SUPER_INFO_SIZE (4k), the superblock checksum
|
|
is wrong and mkfs fails. This has been reported on ppc64 where we pick
|
|
sectorisize from page size (64k). This has been broken since ages
|
|
(2008) and discovered by the recently added superblock checks.
|
|
|
|
Reported-by: Dinar Valeev <dvaleev@suse.com>
|
|
Signed-off-by: David Sterba <dsterba@suse.com>
|
|
---
|
|
utils.c | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/utils.c b/utils.c
|
|
index 60235d84889c..13835051a1a5 100644
|
|
--- a/utils.c
|
|
+++ b/utils.c
|
|
@@ -552,12 +552,12 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg)
|
|
|
|
/* and write out the super block */
|
|
BUG_ON(sizeof(super) > cfg->sectorsize);
|
|
- memset(buf->data, 0, cfg->sectorsize);
|
|
+ memset(buf->data, 0, BTRFS_SUPER_INFO_SIZE);
|
|
memcpy(buf->data, &super, sizeof(super));
|
|
- buf->len = cfg->sectorsize;
|
|
+ buf->len = BTRFS_SUPER_INFO_SIZE;
|
|
csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0);
|
|
- ret = pwrite(fd, buf->data, cfg->sectorsize, cfg->blocks[0]);
|
|
- if (ret != cfg->sectorsize) {
|
|
+ ret = pwrite(fd, buf->data, BTRFS_SUPER_INFO_SIZE, cfg->blocks[0]);
|
|
+ if (ret != BTRFS_SUPER_INFO_SIZE) {
|
|
ret = (ret < 0 ? -errno : -EIO);
|
|
goto out;
|
|
}
|
|
--
|
|
2.6.2
|
|
|