From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1iSgjl-0006fo-Tz for mharc-grub-devel@gnu.org; Thu, 07 Nov 2019 07:18:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:56211) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iSgjf-0006fY-Rn for grub-devel@gnu.org; Thu, 07 Nov 2019 07:18:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iSgjd-0003ox-9U for grub-devel@gnu.org; Thu, 07 Nov 2019 07:17:59 -0500 Received: from dibed.net-space.pl ([84.10.22.86]:56683) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_3DES_EDE_CBC_SHA1:24) (Exim 4.71) (envelope-from ) id 1iSgjc-0003nW-U8 for grub-devel@gnu.org; Thu, 07 Nov 2019 07:17:57 -0500 Received: from router-fw.i.net-space.pl ([192.168.52.1]:54226 "EHLO tomti.i.net-space.pl") by router-fw-old.i.net-space.pl with ESMTP id S1929835AbfKGLwi (ORCPT ); Thu, 7 Nov 2019 12:52:38 +0100 X-Comment: RFC 2476 MSA function at dibed.net-space.pl logged sender identity as: dkiper Date: Thu, 7 Nov 2019 12:52:35 +0100 From: Daniel Kiper To: Vladimir 'phcoder' Serbinenko Cc: The development of GNU GRUB , dave@jikos.cz, mchang@suse.com, pmenzel@molgen.mpg.de, terrelln@fb.com Subject: Re: [PATCH] btrfs: disable zstd support for i386-pc Message-ID: <20191107115235.pxkvffcohbsho443@tomti.i.net-space.pl> References: <20191105091949.29559-1-mchang@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 84.10.22.86 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Nov 2019 12:18:04 -0000 On Wed, Nov 06, 2019 at 11:15:04AM -0800, Vladimir 'phcoder' Serbinenko wrote: > Please don't do it this way. The right solution is to move it to separate > module and include zstd module when needed. Not everybody uses btrfs > embedded area. I recommend not to use it. Using mbr gap or BBP is the > recommended way. I will put the cat among the pigeons. Maybe we should finally stop pretending that the GRUB supports small MBR gaps. Otherwise we will be fighting with such issues endlessly. Daniel > On Tue, 5 Nov 2019, 01:25 Michael Chang, wrote: > > > The zstd support in btrfs has dependenciy to zstd module and core.img > > grows its size significantly to 75KB on my system. The resulted image > > cannot be installed into btrfs bootloader area in the size of 64KB and > > eventually fails with following message. > > > > /usr/sbin/grub-install: warning: your core.img is unusually large. It > > won't fit in the embedding area. > > /usr/sbin/grub-install: error: filesystem `btrfs' doesn't support > > blocklists. > > > > The patch disabled the zstd support of btrfs in pc-bios platform to > > avoid the regression. The resulting size is 56KB, albeit a bit too close > > to the 64KB but works. This is simple workaround until a proper fix > > landed upstream. > > > > Signed-off-by: Michael Chang > > --- > > grub-core/fs/btrfs.c | 18 ++++++++++++++++++ > > 1 file changed, 18 insertions(+) > > > > diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c > > index 48bd3d04a..8f98892d3 100644 > > --- a/grub-core/fs/btrfs.c > > +++ b/grub-core/fs/btrfs.c > > @@ -17,6 +17,7 @@ > > * along with GRUB. If not, see . > > */ > > > > +#ifndef GRUB_MACHINE_PCBIOS > > /* > > * Tell zstd to expose functions that aren't part of the stable API, which > > * aren't safe to use when linking against a dynamic library. We vendor > > in a > > @@ -24,6 +25,7 @@ > > * functions to provide our own allocator, which uses grub_malloc(), to > > zstd. > > */ > > #define ZSTD_STATIC_LINKING_ONLY > > +#endif > > > > #include > > #include > > @@ -35,7 +37,9 @@ > > #include > > #include > > #include > > +#ifndef GRUB_MACHINE_PCBIOS > > #include > > +#endif > > #include > > #include > > #include > > @@ -56,8 +60,10 @@ GRUB_MOD_LICENSE ("GPLv3+"); > > #define GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE (GRUB_BTRFS_LZO_BLOCK_SIZE + \ > > (GRUB_BTRFS_LZO_BLOCK_SIZE / 16) + 64 > > + 3) > > > > +#ifndef GRUB_MACHINE_PCBIOS > > #define ZSTD_BTRFS_MAX_WINDOWLOG 17 > > #define ZSTD_BTRFS_MAX_INPUT (1 << ZSTD_BTRFS_MAX_WINDOWLOG) > > +#endif > > > > typedef grub_uint8_t grub_btrfs_checksum_t[0x20]; > > typedef grub_uint16_t grub_btrfs_uuid_t[8]; > > @@ -229,7 +235,9 @@ struct grub_btrfs_extent_data > > #define GRUB_BTRFS_COMPRESSION_NONE 0 > > #define GRUB_BTRFS_COMPRESSION_ZLIB 1 > > #define GRUB_BTRFS_COMPRESSION_LZO 2 > > +#ifndef GRUB_MACHINE_PCBIOS > > #define GRUB_BTRFS_COMPRESSION_ZSTD 3 > > +#endif > > > > #define GRUB_BTRFS_OBJECT_ID_CHUNK 0x100 > > > > @@ -1229,6 +1237,7 @@ grub_btrfs_read_inode (struct grub_btrfs_data *data, > > return grub_btrfs_read_logical (data, elemaddr, inode, sizeof (*inode), > > 0); > > } > > > > +#ifndef GRUB_MACHINE_PCBIOS > > static void *grub_zstd_malloc (void *state __attribute__((unused)), > > size_t size) > > { > > return grub_malloc (size); > > @@ -1318,6 +1327,7 @@ err: > > > > return ret; > > } > > +#endif > > > > static grub_ssize_t > > grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off, > > @@ -1494,8 +1504,12 @@ grub_btrfs_extent_read (struct grub_btrfs_data > > *data, > > > > if (data->extent->compression != GRUB_BTRFS_COMPRESSION_NONE > > && data->extent->compression != GRUB_BTRFS_COMPRESSION_ZLIB > > +#ifndef GRUB_MACHINE_PCBIOS > > && data->extent->compression != GRUB_BTRFS_COMPRESSION_LZO > > && data->extent->compression != GRUB_BTRFS_COMPRESSION_ZSTD) > > +#else > > + && data->extent->compression != GRUB_BTRFS_COMPRESSION_LZO) > > +#endif > > { > > grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, > > "compression type 0x%x not supported", > > @@ -1535,6 +1549,7 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data, > > != (grub_ssize_t) csize) > > return -1; > > } > > +#ifndef GRUB_MACHINE_PCBIOS > > else if (data->extent->compression == > > GRUB_BTRFS_COMPRESSION_ZSTD) > > { > > if (grub_btrfs_zstd_decompress (data->extent->inl, > > data->extsize - > > @@ -1544,6 +1559,7 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data, > > != (grub_ssize_t) csize) > > return -1; > > } > > +#endif > > else > > grub_memcpy (buf, data->extent->inl + extoff, csize); > > break; > > @@ -1581,10 +1597,12 @@ grub_btrfs_extent_read (struct grub_btrfs_data > > *data, > > ret = grub_btrfs_lzo_decompress (tmp, zsize, extoff > > + grub_le_to_cpu64 > > (data->extent->offset), > > buf, csize); > > +#ifndef GRUB_MACHINE_PCBIOS > > else if (data->extent->compression == > > GRUB_BTRFS_COMPRESSION_ZSTD) > > ret = grub_btrfs_zstd_decompress (tmp, zsize, extoff > > + grub_le_to_cpu64 > > (data->extent->offset), > > buf, csize); > > +#endif > > else > > ret = -1; > > > > -- > > 2.16.4