grub2-efi: added xfs sparse inode patch
This commit is contained in:
parent
de573e5db5
commit
2f6ad3b323
@ -1,5 +1,6 @@
|
||||
untrusted comment: verify with /etc/ports/opt.pub
|
||||
RWSE3ohX2g5d/YJmUPwai4w+Twi2eTcGTxxLuh6HExjesdh+URSxqlpP1xWSFwLQ9xl2NyRwC0LMrQZ4S8i+m0oMo7kxShoIMAw=
|
||||
SHA256 (Pkgfile) = 4e628b4ad1739b28f0c0935d429bcac90557297cb222adb6ca4e3fcb762aad14
|
||||
RWSE3ohX2g5d/QFk2NegbA+5dHnlLfmYWTqNhUaYl7NG0gySX3Jag43+FNZ+zNMGiioT3VxebZd3uMQ0rIBMPdhV1kNBlWmJOQk=
|
||||
SHA256 (Pkgfile) = 577d7e0756e3171bc0bc221bab0ad7a8a6c007710b6ca412bd00eaf9c136c2de
|
||||
SHA256 (.footprint) = be3c0c176335de61fb03e01702968798c101216091640b618b61b467dcfd92d8
|
||||
SHA256 (grub-2.02.tar.xz) = 810b3798d316394f94096ec2797909dbf23c858e48f7b3830826b8daa06b7b0f
|
||||
SHA256 (grub2-xfs.patch) = fcd5a626d4af33665d041ce42df813f1f198d8230ea186481b155a5b676f3b87
|
||||
|
@ -5,12 +5,15 @@
|
||||
|
||||
name=grub2-efi
|
||||
version=2.02
|
||||
release=1
|
||||
source=(http://ftp.gnu.org/gnu/grub/grub-$version.tar.xz)
|
||||
release=2
|
||||
source=(http://ftp.gnu.org/gnu/grub/grub-$version.tar.xz \
|
||||
grub2-xfs.patch)
|
||||
|
||||
build() {
|
||||
export CFLAGS="${CFLAGS} -Wno-error"
|
||||
|
||||
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…
x
Reference in New Issue
Block a user