A.7 File Systems


  • Add a DCACHE_NEED_LOOKUP flag to d_flags to improve the performance of ls and readdir(). (3.1)

  • Switching from tree locks to reader/writer locks improves the performance of read and write-intensive workloads. (3.1)

  • Performance improvements in several areas, particularly for random write workloads. (3.2)

  • Allowing overcommit of ENOSPC reservations to improve performance. (3.2)

  • Add automatic backup of superblock information about tree roots for the previous 4 commits. Add the -o recovery mount option to enable use the root history log if required. (3.2)

  • Add code to follow back references, replacing the manual process for walking those references, and including more detailed corruption messages. (3.2)

  • Allow user-space utilities to inspect metadata. (3.2)

  • Improve performance of checksum verification of read-aheads. (3.2)

  • Add the nospace_cache mount option to disable cache loading without clearing the cache. (3.2)

  • Improve performance of committing transactions. (3.2)

  • When mounting a subvolume, allow a path relative to the tree root to be specified to -o subvol. (3.2)

  • Rework the logic for cluster allocation. (3.3)

  • Rewrite the block group trimming code. (3.3)

  • Increase the size of system chunks. (3.3)

  • Remove caching code that caused unnecessary fragmentation and complexity. (3.4)

  • Remove the code to silently switching single chunks to RAID-0 when balancing a file system. The restriper now allows a choice of RAID-0 or concatenation. (3.4)

  • Support metadata blocks that are larger than 4 KB. (3.5)

  • The thread_pool size can be changed at remount time. (3.5)

  • Add the DEVICE_READY ioctl() to be used in conjunction with btrfs device ready device, providing a lightweight method of telling if all the devices required for a file system are currently in the cache. (3.6)

  • Allow compression to be disabled by specifying the compress=no mount option. (3.6)

  • Improve multithread buffer reads. (3.6)

  • Support UUIDs for subvolumes, and introduce ctime, otime, stime, and rtime for subvolumes, including a transid for each time. (3.6)

  • Rework the DEV_STATS ioctl() to allow it to either get or reset device statistics depending on the argument specified. (3.6)

  • Make the compress and nodatacow mount options mutually exclusive. To improve O_SYNC performance, asynchronous metadata checksumming is not performed under some circumstances. (3.7)

For more information, see https://btrfs.wiki.kernel.org/index.php/Changelog.


  • Add UID/GID to SID mapping. (3.2)

  • Add backup mount option. (3.2)

  • Allow larger rsize (up to 16 MB) and change the default to 1 MB. (3.2)

  • Introduce credit-based flow control. (3.4)

  • Add the cache=strict|none mount option to specify the cache type instead of the strictcache and forcedirectio options. The legacy options are now mutually exclusive. (3.5)

  • The vers=2.1 mount option forces an SMB2 mount. By default, vers=1 (CIFS) is used. (3.5)

  • The vers=2.0 mount option forces an SMB2.02 mount. (3.8)


  • Reduce CPU overhead when appending files preallocated using fallocate() with mode FALLOC_FL_KEEP_SIZE via direct I/O. (3.2)

  • Reduce CPU overhead by optimizing memmove() lengths in extent and index insertions. (3.2)

  • Support block sizes of up to 1 MB using the -C option to mkfs.ext4. This change is not backwards compatible with older kernels. (3.2)

  • Remove the resize and journal=update mount option. (3.4)

  • Improve performance of truncate and unlink. (3.7)

  • Support online resizing of metablock group (META_BG) and 64-bit file systems. (3.7)

  • Add max_dir_size_kb mount option to specify a maximum directory size. (3.7)

  • Re-enable -o discard functionality in no-journal mode. (3.7)

  • Remove support for disabling extended attributes. (3.8)

  • Implement support for SEEK_DATA and SEEK_HOLE. (3.8)


  • Add support for the RAID-5 read-4-write interface. (3.2)

  • Add v4.0 and v4.1 mount options. (3.4)

  • The kernel can deduce the value of clientaddr if this mount option is not specified for NFS v4. (3.4)

  • Add the migration mount option that specifies whether a server supports Transparent State Migration (TSM). (3.7)

  • Handle IPv6 remote addresses from GETDEVICEINFO (required for pNFS). (3.8)

  • Remove the deprecated nfsctl() system call and all related code. (3.8)


  • Add runtime logging support for kernel messages to allow debugging of hangs caused by hardware issues. (3.6)

  • Add console message handling. The log size is configurable by using the ramoops.console_size module option, and the log is accessible at pstore-mountpoint/console-ramoops. (3.6)

  • Add persistent function tracing. The kernel can save the function call chain log to a persistent RAM buffer, which can be decoded and dumped after a reboot. You can use the log to determine the function that was called immediately prior to a reset or panic. (3.6)


  • Increase the file size limit for tmpfs. (3.1)

  • Support fallocate() FALLOC_FL_PUNCH_HOLE and preallocation. (3.5)


  • Improve performance of the inode cache. (3.1)

  • Improve scalability of per-file-system quotas. (3.4)

  • Implement support for SEEK_DATA and SEEK_HOLE. (3.5)

  • Make the inode32 and inode64 mount options work with remounts. (3.7)

  • Make inode64 the default allocation mode. (3.7)

  • Add the XFS_IOC_FREE_EOFBLOCKS ioctl() to enable EOFBLOCKS scanning. (3.8)