Add XFS needsrepair support

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
This commit is contained in:
Javier Martinez Canillas 2021-05-03 17:23:43 +02:00
parent ddafa09a88
commit e91046d264
No known key found for this signature in database
GPG key ID: C751E590D63F3D69
3 changed files with 85 additions and 2 deletions

View file

@ -0,0 +1,79 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Mon, 3 May 2021 16:57:17 +0200
Subject: [PATCH] xfs: Include needsrepair in the supported incompat features
list
XFS now has an incompat feature flag to indicate that the filesystem needs
to be repaired. The Linux kernel refuses to mount a filesystem that has it
set and only the xfs_repair tool is able to clear that flag.
The GRUB doesn't have the concept of mounting filesystems and just attempt
to read the files. But it does some sanity checking, before attempting to
read from a filesystem.
Among the things that are tested, is if the super block only has set the
incompatible features flags that are supported by GRUB. If it contains any
flags that are not listed as supported, reading the XFS filesystem fails.
Since GRUB doesn't attempt to detect if the filesystem is inconsistent nor
replays the journal, just ignore if a filesystem needs to be repaired too.
But print a message if grub_xfs_mount() fails, to give more information to
the user about why that could had been the case.
Suggested-by: Eric Sandeen <esandeen@redhat.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---
grub-core/fs/xfs.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
index 2ce76ec70f9..c4c1bca39a8 100644
--- a/grub-core/fs/xfs.c
+++ b/grub-core/fs/xfs.c
@@ -84,6 +84,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
#define XFS_SB_FEAT_INCOMPAT_BIGTIME (1 << 3) /* large timestamps */
+#define XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR (1 << 4) /* needs xfs_repair */
/*
* Directory entries with ftype are explicitly handled by GRUB code.
@@ -98,7 +99,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
XFS_SB_FEAT_INCOMPAT_SPINODES | \
XFS_SB_FEAT_INCOMPAT_META_UUID | \
- XFS_SB_FEAT_INCOMPAT_BIGTIME)
+ XFS_SB_FEAT_INCOMPAT_BIGTIME | \
+ XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR)
struct grub_xfs_sblock
{
@@ -307,6 +309,16 @@ static int grub_xfs_sb_valid(struct grub_xfs_data *data)
return 0;
}
+static int
+grub_xfs_sb_needs_repair(struct grub_xfs_data *data)
+{
+ return ((data->sblock.version &
+ grub_cpu_to_be16_compile_time (XFS_SB_VERSION_NUMBITS)) ==
+ grub_cpu_to_be16_compile_time (XFS_SB_VERSION_5) &&
+ (data->sblock.sb_features_incompat &
+ grub_cpu_to_be32_compile_time (XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR)));
+}
+
/* Filetype information as used in inodes. */
#define FILETYPE_INO_MASK 0170000
#define FILETYPE_INO_REG 0100000
@@ -949,6 +961,9 @@ grub_xfs_mount (grub_disk_t disk)
return data;
fail:
+ if (grub_xfs_sb_needs_repair(data))
+ grub_dprintf("xfs", "Filesystem needs repair\n");
+
if (grub_errno == GRUB_ERR_OUT_OF_RANGE)
grub_error (GRUB_ERR_BAD_FS, "not an XFS filesystem");

View file

@ -199,3 +199,4 @@ Patch0198: 0198-fs-Use-64bit-type-for-filesystem-timestamp.patch
Patch0199: 0199-ieee1275-drop-HEAP_MAX_ADDR-HEAP_MIN_SIZE.patch Patch0199: 0199-ieee1275-drop-HEAP_MAX_ADDR-HEAP_MIN_SIZE.patch
Patch0200: 0200-ieee1275-claim-more-memory.patch Patch0200: 0200-ieee1275-claim-more-memory.patch
Patch0201: 0201-ieee1275-request-memory-with-ibm-client-architecture.patch Patch0201: 0201-ieee1275-request-memory-with-ibm-client-architecture.patch
Patch0202: 0202-xfs-Include-needsrepair-in-the-supported-incompat-fe.patch

View file

@ -14,7 +14,7 @@
Name: grub2 Name: grub2
Epoch: 1 Epoch: 1
Version: 2.06~rc1 Version: 2.06~rc1
Release: 6%{?dist} Release: 7%{?dist}
Summary: Bootloader with support for Linux, Multiboot and more Summary: Bootloader with support for Linux, Multiboot and more
License: GPLv3+ License: GPLv3+
URL: http://www.gnu.org/software/grub/ URL: http://www.gnu.org/software/grub/
@ -555,7 +555,10 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg
%endif %endif
%changelog %changelog
* Fri Apr 23 2021 Javier Martinez Canillas <javierm@redhat.com> - 2.06~rc1-5 * Mon May 03 2021 Javier Martinez Canillas <javierm@redhat.com> - 2.06~rc1-7
- Add XFS needsrepair support
* Fri Apr 23 2021 Javier Martinez Canillas <javierm@redhat.com> - 2.06~rc1-6
- Find and claim more memory for ieee1275 (dja) - Find and claim more memory for ieee1275 (dja)
* Wed Apr 14 2021 Javier Martinez Canillas <javierm@redhat.com> - 2.06~rc1-5 * Wed Apr 14 2021 Javier Martinez Canillas <javierm@redhat.com> - 2.06~rc1-5