grub2-efi: added xfs sparse inode patch
This commit is contained in:
parent
2555a21ae8
commit
ac0d856d98
@ -1,6 +1,7 @@
|
||||
untrusted comment: verify with /etc/ports/opt.pub
|
||||
RWSE3ohX2g5d/dn5qt9MdIDdhx1aCa9A5s4fl6T4mdXJLNseCjebyUuI0poWVO8Z44IJ6732mVuurZhwLerJhikiTS6nef7aSQg=
|
||||
SHA256 (Pkgfile) = db9fdbe845496dcb22024bffe49c58cf3c9ba7952dfedbf12c9b46c37304d93a
|
||||
RWSE3ohX2g5d/YzXwo8P2M6zq1UnOOrsYSAmaBpa+f3i2uRzSFI/knDDnc6zbRVoPMVlgoSa0ZRPRXA5YN7nFosvvHZwCy6lEQM=
|
||||
SHA256 (Pkgfile) = 98038cdf6bf637a2834c3ec721b6717ef80ec324c83f1ed0a50cd219cdd6bca4
|
||||
SHA256 (.footprint) = be3c0c176335de61fb03e01702968798c101216091640b618b61b467dcfd92d8
|
||||
SHA256 (grub-2.02.tar.xz) = 810b3798d316394f94096ec2797909dbf23c858e48f7b3830826b8daa06b7b0f
|
||||
SHA256 (grub2-relocation.patch) = 51562fa1016c54567dbf42a86c0cfc902372ab579bbee17879a81aff09b76b99
|
||||
SHA256 (grub2-xfs.patch) = fcd5a626d4af33665d041ce42df813f1f198d8230ea186481b155a5b676f3b87
|
||||
|
@ -5,14 +5,15 @@
|
||||
|
||||
name=grub2-efi
|
||||
version=2.02
|
||||
release=1
|
||||
release=2
|
||||
source=(http://ftp.gnu.org/gnu/grub/grub-$version.tar.xz \
|
||||
grub2-relocation.patch)
|
||||
grub2-relocation.patch grub2-xfs.patch)
|
||||
|
||||
build() {
|
||||
export CFLAGS="${CFLAGS} -Wno-error"
|
||||
|
||||
patch -d grub-$version -p1 -i $SRC/grub2-relocation.patch
|
||||
patch -d grub-$version -p1 -i $SRC/grub2-xfs.patch
|
||||
|
||||
# fix for glibc 'gets' removal
|
||||
sed -i -e '/gets is a/d' grub-$version/grub-core/gnulib/stdio.in.h
|
||||
|
60
grub2-efi/grub2-xfs.patch
Normal file
60
grub2-efi/grub2-xfs.patch
Normal file
@ -0,0 +1,60 @@
|
||||
From cda0a857dd7a27cd5d621747464bfe71e8727fff Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
Date: Tue, 29 May 2018 16:16:02 +0200
|
||||
Subject: xfs: Accept filesystem with sparse inodes
|
||||
|
||||
The sparse inode metadata format became a mkfs.xfs default in
|
||||
xfsprogs-4.16.0, and such filesystems are now rejected by grub as
|
||||
containing an incompatible feature.
|
||||
|
||||
In essence, this feature allows xfs to allocate inodes into fragmented
|
||||
freespace. (Without this feature, if xfs could not allocate contiguous
|
||||
space for 64 new inodes, inode creation would fail.)
|
||||
|
||||
In practice, the disk format change is restricted to the inode btree,
|
||||
which as far as I can tell is not used by grub. If all you're doing
|
||||
today is parsing a directory, reading an inode number, and converting
|
||||
that inode number to a disk location, then ignoring this feature
|
||||
should be fine, so I've added it to XFS_SB_FEAT_INCOMPAT_SUPPORTED
|
||||
|
||||
I did some brief testing of this patch by hacking up the regression
|
||||
tests to completely fragment freespace on the test xfs filesystem, and
|
||||
then write a large-ish number of inodes to consume any existing
|
||||
contiguous 64-inode chunk. This way any files the grub tests add and
|
||||
traverse would be in such a fragmented inode allocation. Tests passed,
|
||||
but I'm not sure how to cleanly integrate that into the test harness.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
Tested-by: Chris Murphy <lists@colorremedies.com>
|
||||
---
|
||||
grub-core/fs/xfs.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
|
||||
index c6031bd..3b00c74 100644
|
||||
--- a/grub-core/fs/xfs.c
|
||||
+++ b/grub-core/fs/xfs.c
|
||||
@@ -79,9 +79,18 @@ 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 */
|
||||
|
||||
-/* We do not currently verify metadata UUID so it is safe to read such filesystem */
|
||||
+/*
|
||||
+ * Directory entries with ftype are explicitly handled by GRUB code.
|
||||
+ *
|
||||
+ * We do not currently read the inode btrees, so it is safe to read filesystems
|
||||
+ * with the XFS_SB_FEAT_INCOMPAT_SPINODES feature.
|
||||
+ *
|
||||
+ * We do not currently verify metadata UUID, so it is safe to read filesystems
|
||||
+ * with the XFS_SB_FEAT_INCOMPAT_META_UUID feature.
|
||||
+ */
|
||||
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
||||
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
||||
+ XFS_SB_FEAT_INCOMPAT_SPINODES | \
|
||||
XFS_SB_FEAT_INCOMPAT_META_UUID)
|
||||
|
||||
struct grub_xfs_sblock
|
||||
--
|
||||
cgit v1.0-41-gc330
|
||||
|
Loading…
Reference in New Issue
Block a user