grub2: added xfs sparse inode patch
This commit is contained in:
parent
df64e674c2
commit
2555a21ae8
@ -1,6 +1,6 @@
|
||||
untrusted comment: verify with /etc/ports/opt.pub
|
||||
RWSE3ohX2g5d/YuKz2ciZJj2pWg7ahuEi9zVjiUXdlN0OVLK7FtyJ7mYnK9CNUP+yaUSBSsLy0TeVZUNXU8njZWseZCHQ7GGogk=
|
||||
SHA256 (Pkgfile) = 12d6392ccaba90e55bd8910aec825f9951d0b59a5f6dca2d18488e4b4d97fd3f
|
||||
RWSE3ohX2g5d/SxVGmwlROxvKK8Weep13PAOcxjJ/LJtyxrqfQPaNUwU89QdXIiJwXFGK1DPUL67RLh73dFF0hp3ohXfkTBUdwc=
|
||||
SHA256 (Pkgfile) = 262004c478d147dc0ef0fdbe95a4a5a23032a8d6c93b635d915b6931bc90fa2d
|
||||
SHA256 (.footprint) = b592950a75c1fb931e49e42b9f2b27c5eb2e23d5c4a2c24d27a80d1ccdcac054
|
||||
SHA256 (grub-2.02.tar.xz) = 810b3798d316394f94096ec2797909dbf23c858e48f7b3830826b8daa06b7b0f
|
||||
SHA256 (unifont-9.0.06.pcf.gz) = 6d23e82ea3fd3d79849d675c0c30129b62a3973a83b4cdc05f9994efef773b86
|
||||
@ -9,3 +9,4 @@ SHA256 (grub2-10_linux.diff) = 5621b312a199647909a09e94e710bb4fca1a2be687d61e2ce
|
||||
SHA256 (grub.cfg.sample) = c2e72228c1dd150f727e8d611d6f14956080ce078651b03eb14fcf65b0917dda
|
||||
SHA256 (grub2-intel-ucode.diff) = c20d9f0d207e30c930815bee5b833757da771535ea13436dd94274360f601f0f
|
||||
SHA256 (grub2-relocation.patch) = 51562fa1016c54567dbf42a86c0cfc902372ab579bbee17879a81aff09b76b99
|
||||
SHA256 (grub2-xfs.patch) = fcd5a626d4af33665d041ce42df813f1f198d8230ea186481b155a5b676f3b87
|
||||
|
@ -5,11 +5,11 @@
|
||||
|
||||
name=grub2
|
||||
version=2.02
|
||||
release=2
|
||||
release=3
|
||||
source=(http://ftp.gnu.org/gnu/grub/grub-$version.tar.xz \
|
||||
http://jaeger.morpheus.net/linux/crux/files/unifont-9.0.06.pcf.gz \
|
||||
$name-00_header.diff $name-10_linux.diff grub.cfg.sample \
|
||||
$name-intel-ucode.diff $name-relocation.patch)
|
||||
$name-intel-ucode.diff $name-relocation.patch $name-xfs.patch)
|
||||
|
||||
build() {
|
||||
export CFLAGS="${CFLAGS} -Wno-error"
|
||||
@ -22,6 +22,7 @@ build() {
|
||||
patch -i $SRC/$name-10_linux.diff util/grub.d/10_linux.in
|
||||
patch -i $SRC/$name-intel-ucode.diff util/grub.d/10_linux.in
|
||||
patch -p1 -i $SRC/$name-relocation.patch
|
||||
patch -p1 -i $SRC/$name-xfs.patch
|
||||
|
||||
./configure --prefix=/usr \
|
||||
--sysconfdir=/etc \
|
||||
|
60
grub2/grub2-xfs.patch
Normal file
60
grub2/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