• Filipe Manana's avatar
    btrfs: skip compression property for anything other than files and dirs · 4b73c55f
    Filipe Manana authored
    The compression property only has effect on regular files and directories
    (so that it's propagated to files and subdirectories created inside a
    directory). For any other inode type (symlink, fifo, device, socket),
    it's pointless to set the compression property because it does nothing
    and ends up unnecessarily wasting leaf space due to the pointless xattr
    (75 or 76 bytes, depending on the compression value). Symlinks in
    particular are very common (for example, I have almost 10k symlinks under
    /etc, /usr and /var alone) and therefore it's worth to avoid wasting
    leaf space with the compression xattr.
    
    For example, the compression property can end up on a symlink or character
    device implicitly, through inheritance from a parent directory
    
      $ mkdir /mnt/testdir
      $ btrfs property set /mnt/testdir compression lzo
    
      $ ln -s yadayada /mnt/testdir/lnk
      $ mknod /mnt/testdir/dev c 0 0
    
    Or explicitly like this:
    
      $ ln -s yadayda /mnt/lnk
      $ setfattr -h -n btrfs.compression -v lzo /mnt/lnk
    
    So skip the compression property on inodes that are neither a regular
    file nor a directory.
    
    CC: stable@vger.kernel.org # 5.4+
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    4b73c55f
props.c 11.9 KB