From: Donald Douwsma <ddouwsma@redhat.com>
To: linux-xfs@vger.kernel.org
Cc: Donald Douwsma <ddouwsma@redhat.com>
Subject: [PATCH 2/2] xfs_logprint: decode superblock updates correctly
Date: Thu, 28 Jan 2021 18:37:08 +1100 [thread overview]
Message-ID: <20210128073708.25572-3-ddouwsma@redhat.com> (raw)
In-Reply-To: <20210128073708.25572-1-ddouwsma@redhat.com>
Back when the way superblocks are logged changed, logprint wasnt
updated updated. Currently logprint displays incorrect accounting
information.
SUPER BLOCK Buffer:
icount: 6360863066640355328 ifree: 262144 fdblks: 0 frext: 0
$ printf "0x%x\n" 6360863066640355328
0x5846534200001000
Part of this decodes as 'XFSB', the xfs superblock magic number and not
the free space accounting.
Fix this by looking at the entire superblock buffer and using the format
structure as is done for the other allocation group headers.
Signed-off-by: Donald Douwsma <ddouwsma@redhat.com>
---
logprint/log_misc.c | 22 +++++++++-------------
logprint/log_print_all.c | 23 ++++++++++-------------
2 files changed, 19 insertions(+), 26 deletions(-)
diff --git a/logprint/log_misc.c b/logprint/log_misc.c
index d44e9ff7..929842d0 100644
--- a/logprint/log_misc.c
+++ b/logprint/log_misc.c
@@ -243,25 +243,21 @@ xlog_print_trans_buffer(char **ptr, int len, int *i, int num_ops)
xlog_print_op_header(head, *i, ptr);
if (super_block) {
printf(_("SUPER BLOCK Buffer: "));
- if (be32_to_cpu(head->oh_len) < 4*8) {
+ if (be32_to_cpu(head->oh_len) < sizeof(struct xfs_sb)) {
printf(_("Out of space\n"));
} else {
- __be64 a, b;
+ struct xfs_sb *sb, sb_s;
printf("\n");
- /*
- * memmove because *ptr may not be 8-byte aligned
- */
- memmove(&a, *ptr, sizeof(__be64));
- memmove(&b, *ptr+8, sizeof(__be64));
+ /* memmove because *ptr may not be 8-byte aligned */
+ sb = &sb_s;
+ memmove(sb, *ptr, sizeof(struct xfs_sb));
printf(_("icount: %llu ifree: %llu "),
- (unsigned long long) be64_to_cpu(a),
- (unsigned long long) be64_to_cpu(b));
- memmove(&a, *ptr+16, sizeof(__be64));
- memmove(&b, *ptr+24, sizeof(__be64));
+ be64_to_cpu(sb->sb_icount),
+ be64_to_cpu(sb->sb_ifree) );
printf(_("fdblks: %llu frext: %llu\n"),
- (unsigned long long) be64_to_cpu(a),
- (unsigned long long) be64_to_cpu(b));
+ be64_to_cpu(sb->sb_fdblocks),
+ be64_to_cpu(sb->sb_frextents));
}
super_block = 0;
} else if (be32_to_cpu(*(__be32 *)(*ptr)) == XFS_AGI_MAGIC) {
diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c
index 2b9e810d..8ff87068 100644
--- a/logprint/log_print_all.c
+++ b/logprint/log_print_all.c
@@ -91,22 +91,19 @@ xlog_recover_print_buffer(
len = item->ri_buf[i].i_len;
i++;
if (blkno == 0) { /* super block */
- printf(_(" SUPER Block Buffer:\n"));
+ struct xfs_sb *sb = (struct xfs_sb *)p;
+ printf(_(" Super Block Buffer: (XFSB)\n"));
if (!print_buffer)
continue;
- printf(_(" icount:%llu ifree:%llu "),
- (unsigned long long)
- be64_to_cpu(*(__be64 *)(p)),
- (unsigned long long)
- be64_to_cpu(*(__be64 *)(p+8)));
- printf(_("fdblks:%llu frext:%llu\n"),
- (unsigned long long)
- be64_to_cpu(*(__be64 *)(p+16)),
- (unsigned long long)
- be64_to_cpu(*(__be64 *)(p+24)));
+ printf(_(" icount:%llu ifree:%llu "),
+ be64_to_cpu(sb->sb_icount),
+ be64_to_cpu(sb->sb_ifree));
+ printf(_("fdblks:%llu frext:%llu\n"),
+ be64_to_cpu(sb->sb_fdblocks),
+ be64_to_cpu(sb->sb_frextents));
printf(_(" sunit:%u swidth:%u\n"),
- be32_to_cpu(*(__be32 *)(p+56)),
- be32_to_cpu(*(__be32 *)(p+60)));
+ be32_to_cpu(sb->sb_unit),
+ be32_to_cpu(sb->sb_width));
} else if (be32_to_cpu(*(__be32 *)p) == XFS_AGI_MAGIC) {
int bucket, buckets;
agi = (xfs_agi_t *)p;
--
2.27.0
next prev parent reply other threads:[~2021-01-28 7:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-28 7:37 [PATCH 0/2] xfsprogs: xfs_logprint misc log decoding issues Donald Douwsma
2021-01-28 7:37 ` [PATCH 1/2] xfs_logprint: print misc buffers when using -o Donald Douwsma
2021-01-28 17:35 ` Darrick J. Wong
2021-01-28 21:51 ` Donald Douwsma
2021-01-28 7:37 ` Donald Douwsma [this message]
2021-01-28 17:28 ` [PATCH 2/2] xfs_logprint: decode superblock updates correctly Darrick J. Wong
2021-01-28 21:59 ` Donald Douwsma
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=20210128073708.25572-3-ddouwsma@redhat.com \
--to=ddouwsma@redhat.com \
--cc=linux-xfs@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox