Skip to content
  • Francisco Blas Izquierdo Riera (klondike)'s avatar
    initramfs: allow again choice of the embedded initram compression algorithm · db2aa7fd
    Choosing the appropriate compression option when using an embedded
    initramfs can result in significant size differences in the resulting
    data.
    
    This is caused by avoiding double compression of the initramfs contents.
    For example on my tests, choosing CONFIG_INITRAMFS_COMPRESSION_NONE when
    compressing the kernel using XZ) results in up to 500KiB differences
    (9MiB to 8.5MiB) in the kernel size as the dictionary will not get
    polluted with uncomprensible data and may reuse kernel data too.
    
    Despite embedding an uncompressed initramfs, a user may want to allow
    for a compressed extra initramfs to be passed using the rd system, for
    example to boot a recovery system.  9ba4bcb6 ("initramfs: read
    CONFIG_RD_ variables for initramfs compression") broke that behavior by
    making the choice based on CONFIG_RD_* instead of adding
    CONFIG_INITRAMFS_COMPRESSION_LZ4.  Saddly, CONFIG_RD_* is also used to
    choose the supported RD compression algorithms by the kernel and a user
    may want to support more than one.
    
    This patch also reverts commit 3e4e0f0a ("initramfs: remove
    "compression mode" choice") restoring back the "compression mode" choice
    and includes the CONFIG_INITRAMFS_COMPRESSION_LZ4 option which was never
    added.
    
    As a result the following options are added or readed affecting the embedded
    initramfs compression:
      INITRAMFS_COMPRESSION_NONE Do no compression
      INITRAMFS_COMPRESSION_GZIP Compress using gzip
      INITRAMFS_COMPRESSION_BZIP2 Compress using bzip2
      INITRAMFS_COMPRESSION_LZMA Compress using lzma
      INITRAMFS_COMPRESSION_XZ Compress using xz
      INITRAMFS_COMPRESSION_LZO Compress using lzo
      INITRAMFS_COMPRESSION_LZ4 Compress using lz4
    
    These depend on the corresponding CONFIG_RD_* option being set (except
    NONE which has no dependencies).
    
    This patch depends on the previous one (the previous version didn't) to
    simplify the way in which the algorithm is chosen and keep backwards
    compatibility with the behaviour introduced by 9ba4bcb6
    ("initramfs: read CONFIG_RD_ variables for initramfs compression").
    
    Link: http://lkml.kernel.org/r/57EAD77B.7090607@klondike.es
    
    
    Signed-off-by: default avatarFrancisco Blas Izquierdo Riera (klondike) <klondike@klondike.es>
    Cc: P J P <ppandit@redhat.com>
    Cc: Paul Bolle <pebolle@tiscali.nl>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    db2aa7fd