btrfs-progs: docs: updates

- reformatting
- new documents
- enhancements
- status updates

Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2023-08-23 17:58:06 +02:00
parent a81a3d771b
commit 8001e37409
11 changed files with 321 additions and 187 deletions

View File

@ -13,13 +13,7 @@ Sorted by amount of contributions:
* Oracle * Oracle
The following contributed in the past (sorted alphabetically): The following contributed in the past (sorted alphabetically):
Fujitsu, Fusion-IO, Intel, Linux Foundation, Red Hat, STRATO AG.
* Fujitsu
* Fusion-IO
* Intel
* Linux Foundation
* Red Hat
* STRATO AG
Statistics for 6.x series Statistics for 6.x series
------------------------- -------------------------
@ -74,6 +68,7 @@ Statistics for 5.x series
"5.18", "30", "109159", "155372", "143", "+3489 -1523" "5.18", "30", "109159", "155372", "143", "+3489 -1523"
"5.19", "21", "109140", "155848", "202", "+4448 -3972" "5.19", "21", "109140", "155848", "202", "+4448 -3972"
Statistics for 4.x series Statistics for 4.x series
------------------------- -------------------------
@ -103,6 +98,7 @@ Statistics for 4.x series
"4.19", "25", "97547", "132655", "193", "+2058 -3070" "4.19", "25", "97547", "132655", "193", "+2058 -3070"
"4.20", "22", "97830", "133283", "128", "+1560 -932" "4.20", "22", "97830", "133283", "128", "+1560 -932"
Statistics for 3.x series Statistics for 3.x series
------------------------- -------------------------
@ -131,6 +127,7 @@ Statistics for 3.x series
"3.18", "25", "83910", "112906", "149", "+3696 -1631" "3.18", "25", "83910", "112906", "149", "+3696 -1631"
"3.19", "18", "85420", "115031", "82", "+2802 -677" "3.19", "18", "85420", "115031", "82", "+2802 -677"
Statistics for 2.6.x series Statistics for 2.6.x series
--------------------------- ---------------------------

View File

@ -275,6 +275,9 @@ Fixes:
new value for maximum active threads would not be set to the actual new value for maximum active threads would not be set to the actual
work queues (since 6.0) work queues (since 6.0)
6.4 (Jun 2022)
^^^^^^^^^^^^^^
5.x 5.x
--- ---

View File

@ -1,4 +1,15 @@
Quick start Quick start
=========== ===========
... For a really quick start you can simply create and mount the filesystem. Make
sure that the block device you'd like to use is suitable so you don't overwrite existing data.
.. code-block:: shell
# mkfs.btrfs /dev/sdx
# mount /dev/sdx /mnt/test
The default options should be acceptable for most users and sometimes can be
changed later. The example above is for a single device filesystem, creating a
*single* profile for data (no redundant copies of the blocks), and *DUP*
for metadata (each block is duplicated).

View File

@ -1,35 +0,0 @@
Release checklist
=================
Last code touches:
* make the code ready, collect patches queued for the release
* look to mailinglist for any relevant last-minute fixes
Pre-checks:
* update package in OBS, (multi arch build checks)
* submit sources to coverity
* run all internal functional tests
* defaults
* D=asan
* D=ubsan
* run all build tests
* run with fstests
Pre-release:
* write CHANGES entry
Release:
* tag release, sign
* make tar
* build check of unpacked tar
* upload tar to kernel.org
* refresh git branches, push tags
Post-release:
* write and send announcement mail to mailinglist
* update title on IRC

View File

@ -13,7 +13,7 @@ in meeting your performance expectations for your specific workload.
Combination of features can vary in performance, the table does not Combination of features can vary in performance, the table does not
cover all possibilities. cover all possibilities.
**The table is based on the latest released linux kernel: 6.3** **The table is based on the latest released linux kernel: 6.4**
The columns for each feature reflect the status of the implementation The columns for each feature reflect the status of the implementation
in following ways: in following ways:
@ -32,7 +32,9 @@ in following ways:
.. role:: statusok .. role:: statusok
.. role:: statusmok .. role:: statusmok
.. role:: statusunst .. role:: statusunstable
.. role:: statusunsupp
.. role:: statusincompat
.. list-table:: .. list-table::
:header-rows: 1 :header-rows: 1
@ -126,7 +128,7 @@ in following ways:
- mostly OK - mostly OK
- reading from mirrors in parallel can be optimized further (see below) - reading from mirrors in parallel can be optimized further (see below)
* - :ref:`RAID56<mkfs-section-profiles>` * - :ref:`RAID56<mkfs-section-profiles>`
- :statusunst:`unstable` - :statusunstable:`unstable`
- n/a - n/a
- (see below) - (see below)
* - Mixed block groups * - Mixed block groups
@ -220,11 +222,12 @@ in following ways:
* - :doc:`Subpage block size<Subpage>` * - :doc:`Subpage block size<Subpage>`
- :statusmok:`mostly OK` - :statusmok:`mostly OK`
- mostly OK - mostly OK
- - Also see table below for more detailed compatibility.
* - :doc:`Zoned mode<Zoned-mode>` * - :doc:`Zoned mode<Zoned-mode>`
- :statusmok:`mostly OK` - :statusmok:`mostly OK`
- mostly OK - mostly OK
- there are known bugs, use only for testing - Not yet feature complete but moderately stable, also see table below
for more detailed compatibility.
Please open an issue if: Please open an issue if:
@ -233,6 +236,8 @@ Please open an issue if:
worth mentioning separately worth mentioning separately
- you know of a bug that lowers the feature status - you know of a bug that lowers the feature status
.. _status-subpage-block-size:
Subpage block size Subpage block size
------------------ ------------------
@ -247,19 +252,27 @@ with subpage or require another feature to work:
- Status - Status
- Notes - Notes
* - Inline files * - Inline files
- unsupported - :statusunsupp:`unsupported`
- The max_inline mount option value is ignored - The max_inline mount option value is ignored, as if mounted with max_inline=0
* - Free space cache v1 * - Free space cache v1
- unsupported - :statusunsupp:`unsupported`
- Free space tree is mandatory - Free space tree is mandatory, v1 has some assumptions about page size
* - Compression * - Compression
- partial support - :statusok:`partial support`
- Only page-aligned ranges can be compressed - Only page-aligned ranges can be compressed
* - Sectorsize
- :statusok:`supported`
- The list of supported sector sizes on a given version can be found
in file :file:`/sys/fs/btrfs/features/supported_sectorsizes`
Zoned mode Zoned mode
---------- ----------
Features that completely incompatible with zoned mode are listed below.
Compatible features may not be listed and are assumed to work as they
are unaffected by the zoned device constraints.
.. list-table:: .. list-table::
:header-rows: 1 :header-rows: 1
@ -267,35 +280,56 @@ Zoned mode
- Status - Status
- Notes - Notes
* - Boot * - Boot
- incompatible - :statusincompat:`incompatible`
- The blocks where partition table is stored is used for super block - The blocks where partition table is stored is used for super block
* - Mixed block groups * - Mixed block groups
- incompatible - :statusincompat:`incompatible`
- Interleaving data and metadata would lead to out of order write - Interleaving data and metadata would lead to out of order write
* - NODATACOW * - NODATACOW
- incompatible - :statusincompat:`incompatible`
- In-place overwrite - In-place overwrite
* - fallocate * - fallocate
- incompatible - :statusincompat:`incompatible`
- Preallocation of blocks would require an out of order write - Preallocation of blocks would require an out of order write
* - Free space cache v1 * - Free space cache v1
- incompatible - :statusincompat:`incompatible`
- Cache data are updated in a NODATACOW-way - Cache data are updated in a NODATACOW-way
* - Swapfile
- :statusincompat:`incompatible`
- Swap blocks are written out of order
* - Offline UUID change
- :statusincompat:`incompatible`
- Metadata blocks are updated in-place
* - Free space tree * - Free space tree
- supported - :statusok:`supported`
- -
* - fstrim
- not implemented
- This would require free space v1
* - single profile * - single profile
- supported - :statusok:`supported`
- Both data and metadata - Both data and metadata
* - DUP profile * - DUP profile
- partial support - :statusok:`partial support`
- Only for metadata - Only for metadata
* - Filesystem resize
- :statusok:`supported`
-
* - Balance
- :statusok:`supported`
-
* - Metadata UUID change
- :statusok:`supported`
-
* - RAID (all) * - RAID (all)
- not implemented - not implemented
- This requires raid-stripe-tree feature which is still work in progress - This requires raid-stripe-tree feature which is still work in progress
* - discard
- not implemented
- May not be required at all due to automatic zone reclaim
* - fsverity
- TBD
-
* - seeding
- TBD
-
Details that do not fit the table Details that do not fit the table

View File

@ -9,40 +9,18 @@ to the exactly same size of the block and page. On x86_64 this is typically
pages, like 64KiB on 64bit ARM or PowerPC. This means filesystems created pages, like 64KiB on 64bit ARM or PowerPC. This means filesystems created
with 64KiB sector size cannot be mounted on a system with 4KiB page size. with 64KiB sector size cannot be mounted on a system with 4KiB page size.
While with subpage support, systems with 64KiB page size can create (still needs While with subpage support systems with 64KiB page size can create
"-s 4k" option for :command:`mkfs.btrfs`) and mount filesystems with 4KiB sectorsize. and mount filesystems with 4KiB sectorsize. This still needs to use option "-s
4k" option for :command:`mkfs.btrfs`.
Requirements, limitations Requirements, limitations
------------------------- -------------------------
The initial subpage support has been added in v5.15, although it's still The initial subpage support has been added in v5.15, although it's still
considered as experimental, most features are already working without problems. considered as experimental, most features are already working without problems.
On a 64KiB page system filesystem with 4KiB sectorsize can be mounted and used
as usual as long as the initial mount succeeds. There are cases a mount will be
rejected when verifying compatible features.
End users can mount filesystems with 4KiB sectorsize and do their usual Please refer to status page of :ref:`status-subpage-block-size` for
workload, while should not notice any obvious change, as long as the initial compatibility.
mount succeeded (there are cases a mount will be rejected though).
The following features has some limitations for subpage:
- Supported page sizes: 4KiB, 8KiB, 16KiB, 32KiB, 64KiB
- Supported filesystem sector sizes on a given host are exported in
:file:`/sys/fs/btrfs/features/supported_sectorsizes`
- No inline extents
This is an artificial limitation, to prevent mixed inline and regular extents.
Thus max_inline mount option will be silently ignored for subpage mounts,
and it always acts as "max_inline=0".
- Compression writes are limited to page aligned ranges
Compression write for subpage has been introduced in v5.16, with the
limitation that only page aligned range can be compressed. This limitation
is due to how btrfs handles delayed allocation.
- No support for v1 space cache
The old v1 cache has quite some hard coded page size usage, and considering
it already deprecated, we force v2 cache for subpage.

View File

@ -38,4 +38,6 @@ relocate the data, however this leads to unexpected performance drop. Running
trim periodically could prevent that too. trim periodically could prevent that too.
When a filesystem is created by :doc:`mkfs.btrfs` and is capable When a filesystem is created by :doc:`mkfs.btrfs` and is capable
of trim, then it's by default performed on all devices. of trim, then it's by default performed on all devices. Since kernel 6.2 the
*discard=async* mount option is automatically enabled on devices that support
that.

View File

@ -16,6 +16,14 @@
color: darkorange; color: darkorange;
} }
.statusunst { .statusunstable {
color: red; color: red;
} }
.statusunsupp {
color: darkorange;
}
.statusincompat {
color: goldenrod;
};

View File

@ -34,6 +34,11 @@ DATA STRUCTURES AND DEFINITIONS
.. code-block:: c .. code-block:: c
#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
#define BTRFS_DEVICE_SPEC_BY_ID (1ULL << 3)
#define BTRFS_SUBVOL_SPEC_BY_ID (1ULL << 4)
struct btrfs_ioctl_vol_args_v2 { struct btrfs_ioctl_vol_args_v2 {
__s64 fd; __s64 fd;
__u64 transid; __u64 transid;
@ -111,6 +116,40 @@ DATA STRUCTURES AND DEFINITIONS
__u64 reserved[8]; __u64 reserved[8];
}; };
.. _struct_btrfs_qgroup_inherit:
.. code-block:: c
#define BTRFS_QGROUP_INHERIT_SET_LIMITS (1ULL << 0)
struct btrfs_qgroup_inherit {
__u64 flags;
__u64 num_qgroups;
__u64 num_ref_copies;
__u64 num_excl_copies;
struct btrfs_qgroup_limit lim;
__u64 qgroups[];
};
.. _struct_btrfs_qgroup_limit:
.. code-block:: c
#define BTRFS_QGROUP_LIMIT_MAX_RFER (1ULL << 0)
#define BTRFS_QGROUP_LIMIT_MAX_EXCL (1ULL << 1)
#define BTRFS_QGROUP_LIMIT_RSV_RFER (1ULL << 2)
#define BTRFS_QGROUP_LIMIT_RSV_EXCL (1ULL << 3)
#define BTRFS_QGROUP_LIMIT_RFER_CMPR (1ULL << 4)
#define BTRFS_QGROUP_LIMIT_EXCL_CMPR (1ULL << 5)
struct btrfs_qgroup_limit {
__u64 flags;
__u64 max_rfer;
__u64 max_excl;
__u64 rsv_rfer;
__u64 rsv_excl;
};
.. list-table:: .. list-table::
:header-rows: 1 :header-rows: 1
@ -150,7 +189,7 @@ The 'BTRFS_IOC_NUMBER' is says which operation should be done on the given
arguments. Some ioctls take a specific data structure, some of them share a arguments. Some ioctls take a specific data structure, some of them share a
common one, no argument structure ioctls exist too. common one, no argument structure ioctls exist too.
The library 'libbtrfsutil' wraps a few ioctls for convenience. Using raw ioctls The library *libbtrfsutil* wraps a few ioctls for convenience. Using raw ioctls
is not discouraged but may be cumbersome though it does not need additional is not discouraged but may be cumbersome though it does not need additional
library dependency. Backward compatibility is guaranteed and incompatible library dependency. Backward compatibility is guaranteed and incompatible
changes usually lead to a new version of the ioctl. Enhancements of existing changes usually lead to a new version of the ioctl. Enhancements of existing
@ -174,8 +213,8 @@ LIST OF IOCTLS
- (obsolete) create a subvolume - (obsolete) create a subvolume
- :ref:`struct btrfs_ioctl_vol_args<struct_btrfs_ioctl_vol_args>` - :ref:`struct btrfs_ioctl_vol_args<struct_btrfs_ioctl_vol_args>`
* - BTRFS_IOC_SNAP_CREATE * - BTRFS_IOC_SNAP_CREATE
- - (obsolete) create a snapshot of a subvolume
- - :ref:`struct btrfs_ioctl_vol_args<struct_btrfs_ioctl_vol_args>`
* - BTRFS_IOC_DEFRAG * - BTRFS_IOC_DEFRAG
- -
- -
@ -185,9 +224,9 @@ LIST OF IOCTLS
* - BTRFS_IOC_SCAN_DEV * - BTRFS_IOC_SCAN_DEV
- -
- -
* - BTRFS_IOC_SYNC * - :ref:`BTRFS_IOC_SYNC<BTRFS_IOC_SYNC>`
- - Sync the filesystem, possibly process queued up work
- - NULL
* - BTRFS_IOC_CLONE * - BTRFS_IOC_CLONE
- -
- -
@ -375,6 +414,50 @@ BTRFS_IOC_SUBVOL_CREATE
size is limited by Linux VFS to 255 characters and must not contain a slash size is limited by Linux VFS to 255 characters and must not contain a slash
('/') ('/')
BTRFS_IOC_SNAP_CREATE
~~~~~~~~~~~~~~~~~~~~~
.. note::
obsoleted by :ref:`BTRFS_IOC_SNAP_CREATE_V2<BTRFS_IOC_SNAP_CREATE_V2>`
*(since: 3.0, obsoleted: 4.0)* Create a snapshot of a subvolume.
.. list-table::
:header-rows: 1
* - Field
- Description
* - ioctl fd
- file descriptor of the parent directory of the new subvolume
* - ioctl args
- :ref:`struct btrfs_ioctl_vol_args<struct_btrfs_ioctl_vol_args>`
* - args.fd
- file descriptor of any directory inside the subvolume to snapshot,
must be on the same filesystem
* - args.name
- name of the subvolume, although the buffer can be almost 4k, the file
size is limited by Linux VFS to 255 characters and must not contain a slash
('/')
.. _BTRFS_IOC_SYNC:
BTRFS_IOC_SYNC
~~~~~~~~~~~~~~
Sync the filesystem data as would ``sync()`` syscall do, additionally
wake up the internal transaction thread that may trigger actions like
subvolume cleaning or queued defragmentation.
.. list-table::
:header-rows: 1
* - Field
- Description
* - ioctl fd
- file descriptor of any file or directory in the filesystem
* - ioctl args
- NULL
.. _BTRFS_IOC_SNAP_CREATE_V2: .. _BTRFS_IOC_SNAP_CREATE_V2:
BTRFS_IOC_SNAP_CREATE_V2 BTRFS_IOC_SNAP_CREATE_V2
@ -392,7 +475,8 @@ Create a snapshot of a subvolume.
* - ioctl args * - ioctl args
- :ref:`struct btrfs_ioctl_vol_args_v2<struct_btrfs_ioctl_vol_args_v2>` - :ref:`struct btrfs_ioctl_vol_args_v2<struct_btrfs_ioctl_vol_args_v2>`
* - args.fd * - args.fd
- file descriptor of any directory inside the subvolume to snapshot - file descriptor of any directory inside the subvolume to snapshot,
must be on the filesystem
* - args.transid * - args.transid
- ignored - ignored
* - args.flags * - args.flags
@ -406,7 +490,7 @@ Create a snapshot of a subvolume.
BTRFS_IOC_SUBVOL_CREATE_V2 BTRFS_IOC_SUBVOL_CREATE_V2
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
*(since: 3.6)* Create a subvolume, qgroup inheritance can be specified. *(since: 3.6)* Create a subvolume, qgroup inheritance and limits can be specified.
.. list-table:: .. list-table::
:header-rows: 1 :header-rows: 1
@ -422,17 +506,19 @@ BTRFS_IOC_SUBVOL_CREATE_V2
* - args.transid * - args.transid
- ignored - ignored
* - args.flags * - args.flags
- ignored - flags to set on the subvolume, ``BTRFS_SUBVOL_RDONLY`` for readonly,
``BTRFS_SUBVOL_QGROUP_INHERIT`` if the qgroup related fileds should be
processed
* - args.size * - args.size
- ... - number of entries in ``args.qgroup_inherit``
* - args.qgroup_inherit * - args.qgroup_inherit
- ... - inherit the given qgroups
(:ref:`struct btrfs_qgroup_inherit<struct_btrfs_qgroup_inherit>`) and
limits (:ref:`struct btrfs_qgroup_limit<struct_btrfs_qgroup_limit>`)
* - name * - name
- name of the subvolume, although the buffer can be almost 4k, the file - name of the subvolume, although the buffer can be almost 4k, the file
size is limited by Linux VFS to 255 characters and must not contain a size is limited by Linux VFS to 255 characters and must not contain a
slash ('/') slash ('/')
* - devid
- ...
.. _BTRFS_IOC_SUBVOL_GETFLAGS: .. _BTRFS_IOC_SUBVOL_GETFLAGS:

View File

@ -0,0 +1,49 @@
Release checklist
=================
Last code touches:
* make the code ready, collect patches queued for the release
* look to mailinglist for any relevant last-minute fixes
* skim patches for typos, inconsistent subjects
Pre-checks:
* update package in OBS, (multi arch build checks)
* run all functional tests locally with
* defaults
* D=asan
* D=ubsan
* run all build tests (``tests/build-tests.sh``)
* run with fstests
* check Github actions for status (https://github.com/kdave/btrfs-progs/actions)
* branch *devel*
* branch *release-test* -- extensive pre-release build checks
* branch *coverage-test* -- code coverage, for information purposes only
Pre-release:
* write CHANGES entry (will be visible on RTD right away)
Release:
* tag release, sign
* build check of unpacked tar
* generate documentation
* make tar
* upload tar to kernel.org
* refresh git branches, push tags
Post-release:
* write and send announcement mail to the mailinglist
* update title on IRC
* github updates
* create a new release from the latest tag
* copy text from CHANGES as contents, formatting is the same
* wait for static binaries github action to finish
* run ``ci/actions/update-artifacts`` to copy the built static binaries to the
release (requires github command line tool ``gh``)

View File

@ -61,6 +61,7 @@ Welcome to BTRFS documentation!
dev/dev-send-stream dev/dev-send-stream
dev/dev-json dev/dev-json
dev/dev-internal-apis dev/dev-internal-apis
dev/ReleaseChecklist
btrfs-ioctl btrfs-ioctl
.. toctree:: .. toctree::