# SPDX-License-Identifier: GPL-2.0-only 
 | 
config SQUASHFS 
 | 
    tristate "SquashFS 4.0 - Squashed file system support" 
 | 
    depends on BLOCK 
 | 
    help 
 | 
      Saying Y here includes support for SquashFS 4.0 (a Compressed 
 | 
      Read-Only File System).  Squashfs is a highly compressed read-only 
 | 
      filesystem for Linux.  It uses zlib, lzo or xz compression to 
 | 
      compress both files, inodes and directories.  Inodes in the system 
 | 
      are very small and all blocks are packed to minimise data overhead. 
 | 
      Block sizes greater than 4K are supported up to a maximum of 1 Mbytes 
 | 
      (default block size 128K).  SquashFS 4.0 supports 64 bit filesystems 
 | 
      and files (larger than 4GB), full uid/gid information, hard links and 
 | 
      timestamps. 
 | 
  
 | 
      Squashfs is intended for general read-only filesystem use, for 
 | 
      archival use (i.e. in cases where a .tar.gz file may be used), and in 
 | 
      embedded systems where low overhead is needed.  Further information 
 | 
      and tools are available from http://squashfs.sourceforge.net. 
 | 
  
 | 
      If you want to compile this as a module ( = code which can be 
 | 
      inserted in and removed from the running kernel whenever you want), 
 | 
      say M here.  The module will be called squashfs.  Note that the root 
 | 
      file system (the one containing the directory /) cannot be compiled 
 | 
      as a module. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
choice 
 | 
    prompt "File decompression options" 
 | 
    depends on SQUASHFS 
 | 
    help 
 | 
      Squashfs now supports two options for decompressing file 
 | 
      data.  Traditionally Squashfs has decompressed into an 
 | 
      intermediate buffer and then memcopied it into the page cache. 
 | 
      Squashfs now supports the ability to decompress directly into 
 | 
      the page cache. 
 | 
  
 | 
      If unsure, select "Decompress file data into an intermediate buffer" 
 | 
  
 | 
config SQUASHFS_FILE_CACHE 
 | 
    bool "Decompress file data into an intermediate buffer" 
 | 
    help 
 | 
      Decompress file data into an intermediate buffer and then 
 | 
      memcopy it into the page cache. 
 | 
  
 | 
config SQUASHFS_FILE_DIRECT 
 | 
    bool "Decompress files directly into the page cache" 
 | 
    help 
 | 
      Directly decompress file data into the page cache. 
 | 
      Doing so can significantly improve performance because 
 | 
      it eliminates a memcpy and it also removes the lock contention 
 | 
      on the single buffer. 
 | 
  
 | 
endchoice 
 | 
  
 | 
choice 
 | 
    prompt "Decompressor parallelisation options" 
 | 
    depends on SQUASHFS 
 | 
    help 
 | 
      Squashfs now supports three parallelisation options for 
 | 
      decompression.  Each one exhibits various trade-offs between 
 | 
      decompression performance and CPU and memory usage. 
 | 
  
 | 
      If in doubt, select "Single threaded compression" 
 | 
  
 | 
config SQUASHFS_DECOMP_SINGLE 
 | 
    bool "Single threaded compression" 
 | 
    help 
 | 
      Traditionally Squashfs has used single-threaded decompression. 
 | 
      Only one block (data or metadata) can be decompressed at any 
 | 
      one time.  This limits CPU and memory usage to a minimum. 
 | 
  
 | 
config SQUASHFS_DECOMP_MULTI 
 | 
    bool "Use multiple decompressors for parallel I/O" 
 | 
    help 
 | 
      By default Squashfs uses a single decompressor but it gives 
 | 
      poor performance on parallel I/O workloads when using multiple CPU 
 | 
      machines due to waiting on decompressor availability. 
 | 
  
 | 
      If you have a parallel I/O workload and your system has enough memory, 
 | 
      using this option may improve overall I/O performance. 
 | 
  
 | 
      This decompressor implementation uses up to two parallel 
 | 
      decompressors per core.  It dynamically allocates decompressors 
 | 
      on a demand basis. 
 | 
  
 | 
config SQUASHFS_DECOMP_MULTI_PERCPU 
 | 
    bool "Use percpu multiple decompressors for parallel I/O" 
 | 
    help 
 | 
      By default Squashfs uses a single decompressor but it gives 
 | 
      poor performance on parallel I/O workloads when using multiple CPU 
 | 
      machines due to waiting on decompressor availability. 
 | 
  
 | 
      This decompressor implementation uses a maximum of one 
 | 
      decompressor per core.  It uses percpu variables to ensure 
 | 
      decompression is load-balanced across the cores. 
 | 
  
 | 
endchoice 
 | 
  
 | 
config SQUASHFS_XATTR 
 | 
    bool "Squashfs XATTR support" 
 | 
    depends on SQUASHFS 
 | 
    help 
 | 
      Saying Y here includes support for extended attributes (xattrs). 
 | 
      Xattrs are name:value pairs associated with inodes by 
 | 
      the kernel or by users (see the attr(5) manual page). 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_ZLIB 
 | 
    bool "Include support for ZLIB compressed file systems" 
 | 
    depends on SQUASHFS 
 | 
    select ZLIB_INFLATE 
 | 
    default y 
 | 
    help 
 | 
      ZLIB compression is the standard compression used by Squashfs 
 | 
      file systems.  It offers a good trade-off between compression 
 | 
      achieved and the amount of CPU time and memory necessary to 
 | 
      compress and decompress. 
 | 
  
 | 
      If unsure, say Y. 
 | 
  
 | 
config SQUASHFS_LZ4 
 | 
    bool "Include support for LZ4 compressed file systems" 
 | 
    depends on SQUASHFS 
 | 
    select LZ4_DECOMPRESS 
 | 
    help 
 | 
      Saying Y here includes support for reading Squashfs file systems 
 | 
      compressed with LZ4 compression.  LZ4 compression is mainly 
 | 
      aimed at embedded systems with slower CPUs where the overheads 
 | 
      of zlib are too high. 
 | 
  
 | 
      LZ4 is not the standard compression used in Squashfs and so most 
 | 
      file systems will be readable without selecting this option. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_LZO 
 | 
    bool "Include support for LZO compressed file systems" 
 | 
    depends on SQUASHFS 
 | 
    select LZO_DECOMPRESS 
 | 
    help 
 | 
      Saying Y here includes support for reading Squashfs file systems 
 | 
      compressed with LZO compression.  LZO compression is mainly 
 | 
      aimed at embedded systems with slower CPUs where the overheads 
 | 
      of zlib are too high. 
 | 
  
 | 
      LZO is not the standard compression used in Squashfs and so most 
 | 
      file systems will be readable without selecting this option. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_XZ 
 | 
    bool "Include support for XZ compressed file systems" 
 | 
    depends on SQUASHFS 
 | 
    select XZ_DEC 
 | 
    help 
 | 
      Saying Y here includes support for reading Squashfs file systems 
 | 
      compressed with XZ compression.  XZ gives better compression than 
 | 
      the default zlib compression, at the expense of greater CPU and 
 | 
      memory overhead. 
 | 
  
 | 
      XZ is not the standard compression used in Squashfs and so most 
 | 
      file systems will be readable without selecting this option. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_ZSTD 
 | 
    bool "Include support for ZSTD compressed file systems" 
 | 
    depends on SQUASHFS 
 | 
    select ZSTD_DECOMPRESS 
 | 
    help 
 | 
      Saying Y here includes support for reading Squashfs file systems 
 | 
      compressed with ZSTD compression.  ZSTD gives better compression than 
 | 
      the default ZLIB compression, while using less CPU. 
 | 
  
 | 
      ZSTD is not the standard compression used in Squashfs and so most 
 | 
      file systems will be readable without selecting this option. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_4K_DEVBLK_SIZE 
 | 
    bool "Use 4K device block size?" 
 | 
    depends on SQUASHFS 
 | 
    help 
 | 
      By default Squashfs sets the dev block size (sb_min_blocksize) 
 | 
      to 1K or the smallest block size supported by the block device 
 | 
      (if larger).  This, because blocks are packed together and 
 | 
      unaligned in Squashfs, should reduce latency. 
 | 
  
 | 
      This, however, gives poor performance on MTD NAND devices where 
 | 
      the optimal I/O size is 4K (even though the devices can support 
 | 
      smaller block sizes). 
 | 
  
 | 
      Using a 4K device block size may also improve overall I/O 
 | 
      performance for some file access patterns (e.g. sequential 
 | 
      accesses of files in filesystem order) on all media. 
 | 
  
 | 
      Setting this option will force Squashfs to use a 4K device block 
 | 
      size by default. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_EMBEDDED 
 | 
    bool "Additional option for memory-constrained systems" 
 | 
    depends on SQUASHFS 
 | 
    help 
 | 
      Saying Y here allows you to specify cache size. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config SQUASHFS_FRAGMENT_CACHE_SIZE 
 | 
    int "Number of fragments cached" if SQUASHFS_EMBEDDED 
 | 
    depends on SQUASHFS 
 | 
    default "3" 
 | 
    help 
 | 
      By default SquashFS caches the last 3 fragments read from 
 | 
      the filesystem.  Increasing this amount may mean SquashFS 
 | 
      has to re-read fragments less often from disk, at the expense 
 | 
      of extra system memory.  Decreasing this amount will mean 
 | 
      SquashFS uses less memory at the expense of extra reads from disk. 
 | 
  
 | 
      Note there must be at least one cached fragment.  Anything 
 | 
      much more than three will probably not make much difference. 
 |