All of lore.kernel.org
 help / color / mirror / Atom feed
From: Su Yue <l@damenly.su>
To: linux-btrfs@vger.kernel.org
Cc: l@damenly.su
Subject: [PATCH] btrfs-progs: do not BUG_ON if btrfs_add_to_fsid succeeded to write superblock
Date: Tue, 11 May 2021 12:25:01 +0800	[thread overview]
Message-ID: <20210511042501.900731-1-l@damenly.su> (raw)

Commit 8ef9313cf298 ("btrfs-progs: zoned: implement log-structured
superblock") changed to write BTRFS_SUPER_INFO_SIZE bytes to device.
The before num of bytes to be written is sectorsize.
It causes mkfs.btrfs failed on my 16k pagesize kvm:

  $ /usr/bin/mkfs.btrfs -s 16k -f -mraid0 /dev/vdb2 /dev/vdb3
  btrfs-progs v5.12
  See http://btrfs.wiki.kernel.org for more information.

  ERROR: superblock magic doesn't match
  ERROR: superblock magic doesn't match
  common/device-scan.c:195: btrfs_add_to_fsid: BUG_ON `ret != sectorsize`
  triggered, value 1
  /usr/bin/mkfs.btrfs(btrfs_add_to_fsid+0x274)[0xaaab4fe8a5fc]
  /usr/bin/mkfs.btrfs(main+0x1188)[0xaaab4fe4dc8c]
  /usr/lib/libc.so.6(__libc_start_main+0xe8)[0xffff7223c538]
  /usr/bin/mkfs.btrfs(+0xc558)[0xaaab4fe4c558]

  [1]    225842 abort (core dumped)  /usr/bin/mkfs.btrfs -s 16k -f -mraid0
  /dev/vdb2 /dev/vdb3

btrfs_add_to_fsid() now always calls sbwrite() to write
BTRFS_SUPER_INFO_SIZE bytes to device, so change condition of
the BUG_ON().
Also add comments for sbread() and sbwrite().

Signed-off-by: Su Yue <l@damenly.su>
---
 common/device-scan.c  |  4 ++--
 kernel-shared/zoned.h | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/common/device-scan.c b/common/device-scan.c
index 07cda0c9..6a3bd098 100644
--- a/common/device-scan.c
+++ b/common/device-scan.c
@@ -192,8 +192,8 @@ int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
 	memcpy(&dev_item->uuid, device->uuid, BTRFS_UUID_SIZE);
 
 	ret = sbwrite(fd, buf, BTRFS_SUPER_INFO_OFFSET);
-	BUG_ON(ret != sectorsize);
-
+	/* ensure super block was written to the device */
+	BUG_ON(ret != BTRFS_SUPER_INFO_SIZE);
 	free(buf);
 	list_add(&device->dev_list, &fs_info->fs_devices->devices);
 	device->fs_devices = fs_info->fs_devices;
diff --git a/kernel-shared/zoned.h b/kernel-shared/zoned.h
index a246e161..47129f92 100644
--- a/kernel-shared/zoned.h
+++ b/kernel-shared/zoned.h
@@ -51,11 +51,29 @@ int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info);
 #ifdef BTRFS_ZONED
 size_t btrfs_sb_io(int fd, void *buf, off_t offset, int rw);
 
+/*
+ * sbread - read BTRFS_SUPER_INFO_SIZE bytes from fd to buf
+ *
+ * @fd		fd of the device to be read from
+ * @buf:	buffer contains a super block
+ * @offset:	offset of the superblock
+ *
+ * Return count of bytes successfully read.
+ */
 static inline size_t sbread(int fd, void *buf, off_t offset)
 {
 	return btrfs_sb_io(fd, buf, offset, READ);
 }
 
+/*
+ * sbwrite - write BTRFS_SUPER_INFO_SIZE bytes from buf to fd
+ *
+ * @fd		fd of the device to be written to
+ * @buf:	buffer contains a super block
+ * @offset:	offset of the superblock
+ *
+ * Return count of bytes successfully written.
+ */
 static inline size_t sbwrite(int fd, void *buf, off_t offset)
 {
 	return btrfs_sb_io(fd, buf, offset, WRITE);
-- 
2.31.1


             reply	other threads:[~2021-05-11  4:25 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-11  4:25 Su Yue [this message]
2021-05-12 14:01 ` [PATCH] btrfs-progs: do not BUG_ON if btrfs_add_to_fsid succeeded to write superblock David Sterba
2021-05-13  0:37   ` Su Yue
2021-05-14 11:22     ` David Sterba
2021-05-14 13:23       ` Su Yue
2021-05-14 13:50         ` Qu Wenruo
2021-05-14 14:28           ` David Sterba

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=20210511042501.900731-1-l@damenly.su \
    --to=l@damenly.su \
    --cc=linux-btrfs@vger.kernel.org \
    /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 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.