grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] btrfs: disable zstd support for i386-pc


From: Michael Chang
Subject: Re: [PATCH] btrfs: disable zstd support for i386-pc
Date: Thu, 7 Nov 2019 04:22:08 +0000

On Tue, Nov 05, 2019 at 11:52:44AM +0100, Paul Menzel wrote:
> Dear Michael,
> 
> 
> Thank you for your patch.
> 
> On 2019-11-05 10:19, Michael Chang wrote:
> > The zstd support in btrfs has dependenciy to zstd module and core.img
> 
> dependency

OK. The typo will be corrected next version.

> 
> > 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
> 
> disables (present tense)

OK. It will be corrected next version.

> 
> Maybe:
> 
> So, disable the zstd support of btrfs for the 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
> 
> is *a* simple

OK. Next version will correct this.

> 
> > landed upstream.
> 
> lands

OK.

> 
> Is there a feature request/bug report for this? Maybe reference it heare?

Yes, it is reported on openSUSE bugzilla.

http://bugzilla.opensuse.org/show_bug.cgi?id=1154809

I will add the bz reference next version.

> 
> > Signed-off-by: Michael Chang <address@hidden>
> > ---
> >  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 <http://www.gnu.org/licenses/>.
> >   */
> >  
> > +#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 <grub/err.h>
> >  #include <grub/file.h>
> > @@ -35,7 +37,9 @@
> >  #include <grub/lib/crc.h>
> >  #include <grub/deflate.h>
> >  #include <minilzo.h>
> > +#ifndef GRUB_MACHINE_PCBIOS
> >  #include <zstd.h>
> > +#endif
> >  #include <grub/i18n.h>
> >  #include <grub/btrfs.h>
> >  #include <grub/crypto.h>
> > @@ -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
> 
> Why not just guard the ZSTD line by switching the order of LZO and ZSTD for
> the closing bracket?

Yes. Indeed it is more readable and also makes my vim editor's syntax
highlighting happy. I will do it in next version.

> 
> >     {
> >       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;
> 
> Does some documentation need to be updated?

I didn't know which document is appropriate for this, if there's any I'd
like to add. Please let me know if you have any idea about this.

Thanks for your review.

Regards,
Michael

> 
> 
> Kind regards,
> 
> Paul
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]