)]}'
{
  "log": [
    {
      "commit": "afdc3a65e33f4d42f768ad50dca20c32e5ee1496",
      "tree": "dc090f61ce8e5723b94cb252c59f26c3592d12b5",
      "parents": [
        "bcc6f1a11f44dc9e0b3a7c5cdfb44136fa1de5c5"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:09:57 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:09:57 2026 +0200"
      },
      "message": "Btrfs progs v7.3\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "bcc6f1a11f44dc9e0b3a7c5cdfb44136fa1de5c5",
      "tree": "81f11a044acd088418344af56034a7e27d10699e",
      "parents": [
        "af05ee085bd2e19b6e9d7c228f752a1e5ad4bac3"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Nov 07 10:03:34 2025 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: update CHANGES for 7.3\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "af05ee085bd2e19b6e9d7c228f752a1e5ad4bac3",
      "tree": "c86d7d683a7cd2f46abb0402ec5458cc04c14e16",
      "parents": [
        "a498872209892876848ea9c1939477bb958c4375"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Oct 20 00:51:09 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: add 7.0 tick on graphs\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "a498872209892876848ea9c1939477bb958c4375",
      "tree": "946ce1736a0cc305be3e4ec0cc6f1cac0c92f1c6",
      "parents": [
        "7a2a475133639e5c45a9f61e5a851f9d74bf4162"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Oct 20 00:42:37 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: add heading for 6.x on kernel/version\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "7a2a475133639e5c45a9f61e5a851f9d74bf4162",
      "tree": "74a8a8c5114604d8197b9053942991c7b0c2326b",
      "parents": [
        "58e61be661883fc1524e5ec58c1dc086427740dd"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Oct 20 00:37:20 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: minor fixups in kernel/version\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "58e61be661883fc1524e5ec58c1dc086427740dd",
      "tree": "1ee0ecaf1d2415f715b8e5369271028396a68314",
      "parents": [
        "4a1d4227ea1ae2309c3043a371032ebde937fb9f"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Apr 13 18:15:22 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: update Status page\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "4a1d4227ea1ae2309c3043a371032ebde937fb9f",
      "tree": "8bc7d170fe3e99c33cf9810cb4bd823163a9baf0",
      "parents": [
        "7c550900a32babed92804798366a37eb7f5b4775"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 15 15:00:15 2024 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: add kernel changelog for 7.3\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "7c550900a32babed92804798366a37eb7f5b4775",
      "tree": "92b099444e4e598be922be690dcb406874036fb9",
      "parents": [
        "6f526c12a7053df744462b1d1a8fe29902417400"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 09 20:25:54 2026 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: update kernel features for 7.3\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "6f526c12a7053df744462b1d1a8fe29902417400",
      "tree": "cc5891c2a65d28d8c2f76bcb8d58c7f62bb4c71a",
      "parents": [
        "97c1f1800e24356bdcaffebfbe4ca48f28caa995"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Mar 21 00:59:22 2025 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: update 7.3 contribution graphs\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "97c1f1800e24356bdcaffebfbe4ca48f28caa995",
      "tree": "6290b7601bb4206ed9eecfc513938a7eea159ef8",
      "parents": [
        "e69e94b769df196e2fd8fe6495eea46fc8f0097d"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jun 17 01:24:08 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: add 7.3 kernel development statistics\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "e69e94b769df196e2fd8fe6495eea46fc8f0097d",
      "tree": "7a0c0068f7912c189c84de0f8f48fe35dc8e8b55",
      "parents": [
        "18d816b2eb3f266292ee04102466af865155750a"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Thu Oct 15 10:55:02 2026 +1030"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: receive: fix and enhance inlined lzo decompression\n\n[BUG]\nThere is a bug report of heap memory overflow during receive if\n--force-decompress is utilized:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\u003d\u003d557235\u003d\u003dERROR: AddressSanitizer: heap-buffer-overflow on address 0x5020000000c0 at pc 0x5c38d895e8b9 bp 0x7ffdaefad510 sp 0x7ffdaefad500\nWRITE of size 1 at 0x5020000000c0 thread T0\n    #0 0x5c38d895e8b8 in lzo1x_decompress_safe /tmp/tmp.aIYhV2VAge/lzo-2.10/minilzo/minilzo.c:6313\n    #1 0x5c38d88623cb in decompress_lzo cmds/receive.c:1165\n    #2 0x5c38d886274f in decompress_and_write cmds/receive.c:1222\n    #3 0x5c38d8863459 in process_encoded_write cmds/receive.c:1320\n    #4 0x5c38d8785daf in read_and_process_cmd common/send-stream.c:505\n    #5 0x5c38d878a16f in btrfs_read_and_process_send_stream common/send-stream.c:654\n    #6 0x5c38d88650fc in do_receive cmds/receive.c:1589\n    #7 0x5c38d88664ab in cmd_receive cmds/receive.c:1827\n    #8 0x5c38d869729b in cmd_execute cmds/commands.h:126\n    #9 0x5c38d8698a6b in main /home/kevinv/btrfs-progs/btrfs.c:474\n    #10 0x72779f02a1c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58\n    #11 0x72779f02a28a in __libc_start_main_impl ../csu/libc-start.c:360\n    #12 0x5c38d8697184 in _start (/home/kevinv/btrfs-progs/btrfs+0x89184) (BuildId: a2ab208cbd7ebc744934a9ed7a8963a20b35fcf4)\n\n0x5020000000c0 is located 0 bytes after 16-byte region [0x5020000000b0,0x5020000000c0)\nallocated by thread T0 here:\n    #0 0x72779f4fd340 in calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77\n    #1 0x5c38d8862634 in decompress_and_write cmds/receive.c:1191\n    #2 0x5c38d8863459 in process_encoded_write cmds/receive.c:1320\n    #3 0x5c38d8785daf in read_and_process_cmd common/send-stream.c:505\n    #4 0x5c38d878a16f in btrfs_read_and_process_send_stream common/send-stream.c:654\n    #5 0x5c38d88650fc in do_receive cmds/receive.c:1589\n    #6 0x5c38d88664ab in cmd_receive cmds/receive.c:1827\n    #7 0x5c38d869729b in cmd_execute cmds/commands.h:126\n    #8 0x5c38d8698a6b in main /home/kevinv/btrfs-progs/btrfs.c:474\n    #9 0x72779f02a1c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58\n    #10 0x72779f02a28a in __libc_start_main_impl ../csu/libc-start.c:360\n    #11 0x5c38d8697184 in _start (/home/kevinv/btrfs-progs/btrfs+0x89184) (BuildId: a2ab208cbd7ebc744934a9ed7a8963a20b35fcf4)\n\nSUMMARY: AddressSanitizer: heap-buffer-overflow /tmp/tmp.aIYhV2VAge/lz\n\n[CAUSE]\nDuring lzo decompression, btrfs-progs always assume that the output\nbuffer is block aligned, even for inlined extents.\n\nHowever since kernel commit 3eaf5f082c4c (\"btrfs: extract inlined\ncreation into a dedicated delalloc helper\"), btrfs will create inlined\ncompressed extents with tailing zero included.\n\nFor zlib and zstd it\u0027s fine as they provide multi-shot APIs, if the\noutput is exhausted, zlib/zstd doesn\u0027t error out, allowing us to\ngracefully end the decompression.\n\nBut LZO has no multi-shot API, thus we have to ensure the output is\nlarge enough to contain one fs block.\nFor inlined case, the output buffer contains only i_size bytes, which\ncan be smaller than a block.\n\nThis makes inline lzo extents decompression to write the full block into\nthe output buffer, overflow the heap.\n\n[FIX]\nFollow the kernel by introducing a dedicated inline decompression path,\nand do extra validation for inlined decompression.\n\nThere is also a similar bug in the regular path, that crafted stream can\nintentionally create a segment that doesn\u0027t take a full block.\nIn that case we still advance output buffer by blocksize, which can\ncause the last block to overflow the buffer.\n\nAlso fix that by always limiting the output buffer size comparing to\n@unencoded_len.\n\nIssue: #1184\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "18d816b2eb3f266292ee04102466af865155750a",
      "tree": "cbdb2c0407a5cf15c37f30da612477259b51693e",
      "parents": [
        "8b159c81c3ab1be01d22b0b97bc1aec34042822a"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Mon Oct 12 19:40:06 2026 +1030"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: slightly loosen the balance reject condition\n\nSince commit dde71e2be9bd (\"btrfs-progs: reject writes if the fs has\nrunning replace/balance\"), btrfs-progs will reject any writable\noperation to the fs if there is a balance item in the root tree.\n\nHowever there is a report that such rejection is too strict, as the user\nhad a corruption in the extent tree only, for which no reloc tree should\nexist, and the corruption can be repaired.\n\nFurthermore, the reloc tree in that image has refs 0, meaning it has\nalready been merged, thus it\u0027s safe to modify the fs.\n\nInstead of the overly strict balance item checks, do a kernel-like reloc\ntree search, and only reject the write if there is a valid reloc tree\nwhose refs are not 0.\n\nIf there is no such valid reloc tree, still allow writable operations.\n\nIssue: #1182\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "8b159c81c3ab1be01d22b0b97bc1aec34042822a",
      "tree": "9f8d0e1797c2325e7cace27e2be0a78c71de540c",
      "parents": [
        "b755c8bf3a0a7c889001abc7731359d7027c5c40"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Mon Oct 05 18:56:17 2026 +1030"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: tests: add a new test case for qgroup tree check\n\nThe workload is straight forward:\n\n- Create a btrfs with qgroup full mode\n\n- Create 512 subvolumes\n  This should cause at least 2 leaves, even using 64K nodesize.\n\n- Create qgroup 1/1 and assign 0/5 to it\n\n- Run btrfs-check on the fs\n  Unpatched progs will load the last leaf first, add the qgroup relation\n  item without loading the qgroups in the previous leaf.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "b755c8bf3a0a7c889001abc7731359d7027c5c40",
      "tree": "76bbe855cdf7566d7d82627ae498ec7e4d2f31df",
      "parents": [
        "eeb39aa472ebac5c8d012770ee69ea92ccc8873e"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Mon Oct 05 18:43:53 2026 +1030"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: check: refactor load_quota_info()\n\nModernize that function by:\n\n- Use btrfs_key when possible\n  The structure btrfs_disk_key is only for on-disk usage, every\n  in-memory operation is based on btrfs_key.\n\n  This includes the function alloc_count(), which now also accepts\n  btrfs_key as a parameter.\n\n- Enhance the error handling\n  The path is not released when we hit an error.\n\n- Use an dedicated helper to scan one leaf\n  Instead of nested loops, which is bug-prone for continue/break calls.\n\n- Remove the unnecessary double loop\n  There is a local variable @search_relations, which has caused a long\n  existing bug before.\n\n  The idea is to skip all the QGROUP_LIMIT items, but we can skip them\n  very quickly, and it\u0027s way better for one\u0027s mental health just to do a\n  full tree iteration.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "eeb39aa472ebac5c8d012770ee69ea92ccc8873e",
      "tree": "538a092f28ce8e30568e2c7b2e9e439544628056",
      "parents": [
        "8373a7f6ddc17592a6d5ec5fb7a95f35e75b594b"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Mon Oct 05 18:41:52 2026 +1030"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: check: remove unused qgroup_count::key\n\nThat member is only set during insert, but never read again.\nAnd it\u0027s against the common practice to use btrfs_key structure for\nin-memory structures.\n\nJust remove the member to save some space for qgroup_count::key.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "8373a7f6ddc17592a6d5ec5fb7a95f35e75b594b",
      "tree": "e0f1f92582e150094c1083299fca42bcba6afb43",
      "parents": [
        "1b3ca3263a2c4cae4cdb4423d3d91455522cb179"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Mon Oct 05 18:22:08 2026 +1030"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: check: fix the inverted condition to load qgroups\n\n[BUG]\nWhen a qgroup tree is higher than level 0 and has a qgroup relation\nbetween the first subvolume and a higher level qgroup, the btrfs check\ncan failed to load qgroup tree.\n\nA minimal reproducer looks like the following:\n\n  mkfs.btrfs -f -K -n 4k $dev \u003e /dev/null\n  mount $dev $mnt\n  btrfs quota enable \"$mnt\"\n  btrfs quota rescan -w $mnt\n  for i in $(seq 1 32); do\n          btrfs subvolume create \"$mnt/s$i\" \u003e/dev/null\n  done\n  id\u003d$(btrfs subvolume list \"$mnt\" | awk \u0027NR\u003d\u003d1 {print $2}\u0027)\n  btrfs qgroup create 1/1 \"$mnt\"\n  btrfs qgroup assign \"0/$id\" 1/1 \"$mnt\"\n  umount $mnt\n  btrfs check -Q $dev\n\nThe failure looks like:\n\n Opening filesystem to check...\n Checking filesystem on /dev/test/scratch1\n UUID: fbe3bc62-168a-4fec-8ef5-ba5f92d8c22c\n Print quota groups report for /dev/test/scratch1\n UUID: fbe3bc62-168a-4fec-8ef5-ba5f92d8c22c\n ERROR: failed to add qgroup relation, member\u003d256 parent\u003d281474976710657: No such file or directory\n ERROR: loading qgroups from disk: -2\n extent buffer leak: start 30789632 len 4096\n extent buffer leak: start 30793728 len 4096\n\n[CAUSE]\nWith extra debug output, the following one line shows the problem pretty\nwell:\n\n load_quota_info: search_relations\u003d0 search_key\u003d(246 0 0)\n\nThat\u0027s for the first loop of load_quota_info(), which should start from\nthe first leaf and load all qgroups into memory.\n\nHowever the search key is not (0 0 0), it\u0027s the inverted condition\ninitializing the search key cause btrfs-check to grab the leaf with\nqgroup relation items, not the first leaf.\n\nThus btrfs-check failed to load the qgroups in earlier leaves, causing\nthe above failure.\n\n[FIX]\nThe code is not that well written, but as a hot fix just revert the\ncondition to fix the bug.\n\nIssues: #1180\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "1b3ca3263a2c4cae4cdb4423d3d91455522cb179",
      "tree": "eaed0749d71343b5db6bba5095bd53d022900b29",
      "parents": [
        "0fa336341fbb0737229aaf01d79a04ca90e18b04"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Feb 04 07:36:30 2026 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: CHANGES: release 7.2 skipped\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "0fa336341fbb0737229aaf01d79a04ca90e18b04",
      "tree": "18457b4ba3c876556fe0ef97802dd34a016c4a16",
      "parents": [
        "8bd7e21e86436ee9e130c063acda7de239655e84"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Sep 15 07:58:06 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: add a dedicated multi-device support chapter\n\nBtrfs, like all other multi-device storage solutions, requires proper\ndevice scan and registration to handle multi-device arrays.\n\nHowever btrfs has some extra requirements and quirks related to\nmulti-device support.\n\nRecord those extra into into a new \"MULTI-DEVICE SUPPORT\" chapter in man\n5 btrfs. For now it includes:\n\n- Requirement for device scan registration\n\n- Requirement for initramfs if the rootfs has multiple devices\n\n- Quirk related to device path shown in mount point\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "8bd7e21e86436ee9e130c063acda7de239655e84",
      "tree": "acf11ab2ddf6aa54e24574dc3ac0f12a0d9a8f08",
      "parents": [
        "6a2039e3b3ae1efed07742e0f8eb2be3ff83db31"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Sep 02 07:41:21 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: scrub: only restore the old scrub limit after scrub is finished\n\n[BUG]\nThere is a bug report that the --limit option of `btrfs scrub start`\ndoesn\u0027t properly apply for all devices.\n\n[CAUSE]\nIt turns out that the timing we restore the scrub limit is too early:\n\n scrub_start()\n |- read_scrub_device_limit()\n |- write_scrub_device_limit()\n |  The old limit and new limit are written before we start scrub.\n |\n |- pthread_create()\n |  Now we start threads to do the real scrub ioctl for each device\n |\n |- write_scrub_device_limit()\n |  Now we already restore the old throughput for the first device.\n |\n |- pthread_join()\n    We only wait for the scrub to finish after we have restored the old\n    limit, which normally is no limit.\n\n[FIX]\nMove the old limit restore code after we have waited for all scrub\nthreads.\n\nIssue: #1165\nFixes: 7c1c88e41668 (\"btrfs-progs: scrub: add the new --limit option to set the throughput limit at runtime\")\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "6a2039e3b3ae1efed07742e0f8eb2be3ff83db31",
      "tree": "3363d62d880bf9ecdc2ee59bfdea75e9a8db3bdf",
      "parents": [
        "820db4b84810506dcbf794ab0a7abe79f2b5a56a"
      ],
      "author": {
        "name": "Andrus Suvalau",
        "email": "andrus.suvalau@n-able.com",
        "time": "Wed Sep 30 12:58:20 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: tests: fix typo in 044-rootdir-hardlink-size\n\nFix the error that occurs during mkfs test execution:\n    [TEST/mkfs]   044-rootdir-hardlink-size\n./test.sh: line 13: check_glolbal_prereq: command not found\n\nSigned-off-by: Andrus Suvalau \u003candrus.suvalau@n-able.com\u003e\n"
    },
    {
      "commit": "820db4b84810506dcbf794ab0a7abe79f2b5a56a",
      "tree": "1e2f142aadcb4e1325bafff82924543e1ea23dd8",
      "parents": [
        "8586e74daffb9ca4efc2f9335dd3c50226978151"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Thu May 28 16:34:36 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: tests: add reproducibility check harness\n\nAdd tests/reproducibility-check.sh, a standalone root-required test that\nchecks mkfs.btrfs produces byte-identical images from identical inputs.\nFor a matrix of environment variations it runs mkfs twice and cmp\u0027s the\nraw images:\n\n  - baseline, wall-clock time, TZ, locale, umask and working directory,\n    for both empty and --rootdir images;\n  - source uid, source filesystem (the same tree on loop-mounted ext4 vs\n    xfs), and compression (lzo/zlib/zstd), for --rootdir only.\n\nEach run uses the documented recipe: a fixed -U, SOURCE_DATE_EPOCH and\nDETERMINISTIC_SEED\u003d1, and no --device-uuid, so the matrix also confirms\nmkfs derives the device UUID from the fs UUID on its own. The source\ntree is chown\u0027d to 0:0 first (the one piece left to the caller) and mkfs\nnormalizes timestamps itself. The ext4 mount\u0027s lost+found is stripped so\nthe ext4 and xfs trees match, and two locales are probed at startup so\nthe locale case compares two real locales or is skipped.\n\nRoot is required for the ownership and loop-mounted source-filesystem\nvariations. With the preceding patches, all variations pass.\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "8586e74daffb9ca4efc2f9335dd3c50226978151",
      "tree": "6d721180743fe397c9706e545793a699aee5fac4",
      "parents": [
        "27700f4bfcaf248b511c29bf9023a5cadeeac725"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Tue Jun 02 20:58:01 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: document SOURCE_DATE_EPOCH and DETERMINISTIC_SEED\n\nAdd an ENVIRONMENT section to mkfs.btrfs(8) for the two environment\nvariables that make image creation reproducible: SOURCE_DATE_EPOCH\n(timestamps) and DETERMINISTIC_SEED (UUID derivation, requires -U). It\ncovers the empty-is-unset and invalid-is-an-error handling, the minimal\nrecipe, and that normalizing ownership (chown -R 0:0) of a -r tree is\nleft to the caller.\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "27700f4bfcaf248b511c29bf9023a5cadeeac725",
      "tree": "2ded6833755cc8eeb0ce73e9451bdb86a42f27cb",
      "parents": [
        "bb36d858465457e2940c11c2cb2bc048274fdfb2"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Thu May 28 14:44:48 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: add a sorted directory walker for reproducible -r\n\nmkfs.btrfs -r walks the source tree with nftw(), which returns entries in\nthe source filesystem\u0027s readdir() order. That order comes from the\nfilesystem, not the tree: ext4 uses a name hash with a per-fs seed, xfs a\nb+tree key order, tmpfs and btrfs insertion order. Discovery order then\ndecides inode numbers, dir_index values, extent bytenrs, and which\nhardlink owns the data, so the same tree staged on two different\nfilesystems produces two different images.\n\nAdd path_sorted_walk() in common/path-utils, which sorts each directory\u0027s\nentries by name (byte-wise strcmp, not the locale-dependent strcoll)\nbefore recursing. It keeps nftw()\u0027s callback signature and\npreorder/FTW_PHYS semantics. ftw_add_inode() still needs a NULL-stat\nguard: the walker reports a failed lstat() as FTW_NS with a NULL stat\nwhere glibc nftw() passes a buffer, so the callback skips it instead of\ndereferencing. The walker also matches\nthe two nftw() edges the callbacks depend on: an unreadable directory is\nreported once as FTW_DNR, and errno is checked after the readdir() loop\nsince readdir() returns NULL for both end-of-stream and error. The child\npath is heap-allocated so a deep tree doesn\u0027t overflow the stack.\n\nA sorted traversal means reading a whole directory up front plus the qsort\nand allocations that go with it. A regular mkfs doesn\u0027t need that, so keep\nnftw() as the default and only sort when a reproducible image is actually\nrequested, i.e. when both SOURCE_DATE_EPOCH and DETERMINISTIC_SEED are set\n(reproducible_is_enabled()). Setting just one can\u0027t produce a reproducible\nimage anyway, since the other source of nondeterminism (host time, or\nrandom UUIDs) still leaks in. btrfs_mkfs_size_dir() stays on nftw()\nregardless; it only sums sizes and counts inodes, so walk order doesn\u0027t\nmatter there.\n\nThe same reproducible mode sorts each inode\u0027s xattrs by name in\nadd_xattr_item(), the xattr counterpart of sorting directory entries. It\nonly matters when two names collide under btrfs_name_hash() and share a\ndir_item stored in insertion order, but sorting removes the dependence.\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "bb36d858465457e2940c11c2cb2bc048274fdfb2",
      "tree": "797579341be5f58ea84989a353bfd55602eea718",
      "parents": [
        "013b0e416a8ece04f9ec23cd00bf5b27bd150c60"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Thu May 28 14:35:35 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: honor SOURCE_DATE_EPOCH for -r source-file timestamps\n\nWith `mkfs.btrfs -r`, stat_to_inode_item() copies each source inode\u0027s\natime, ctime and mtime from the host, so the image is not reproducible\neven when the source tree is otherwise normalized. When\nSOURCE_DATE_EPOCH is set, pin ctime and atime to it and clamp mtime to\nit. When it is unset or empty, use the host timestamps as before.\n\nThe timestamps need different handling:\n\n  - ctime cannot be set through the filesystem API; the kernel updates\n    it after any inode change. mkfs writes the raw inode, so pin it to\n    the epoch there.\n  - atime is not stable source metadata. On a relatime filesystem, the\n    first mkfs can record an old atime and advance it while reading the\n    source, then a second mkfs records a different value. Pin it to the\n    epoch so reads cannot change the image.\n  - mtime remains meaningful source metadata. Preserve values older\n    than the epoch and clamp newer values, so nothing in the image is\n    newer than the source date.\n\nAdd a regression using a relatime source. The first build advances the\nsource atime. The test builds again, compares the raw images, and mounts\nthe result to verify that atime and ctime equal the epoch while\nthe older mtime is preserved.\n\nFactor the \"is SOURCE_DATE_EPOCH set\" test into\nreproducible_has_source_date() so it reads the same everywhere it is\nneeded.\n\nuid/gid remain the caller\u0027s responsibility (chown -R 0:0): one line of\nshell, where a --owner flag would be permanent CLI surface.\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "013b0e416a8ece04f9ec23cd00bf5b27bd150c60",
      "tree": "dc28cc06039d2e580f5968b61e4fed719be76dfd",
      "parents": [
        "d5c6f6f055c0c9ec33b2ce131586b6178e44a759"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Thu May 28 13:01:33 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: stop leaking host CPU count and page size\n\nTwo host attributes leak into the on-disk image, so the same arguments\nproduce different output on different build machines.\n\n  1. nr_global_roots defaulted to sysconf(_SC_NPROCESSORS_ONLN). With\n     extent-tree-v2 this is written to the super block\n     (btrfs_set_super_nr_global_roots) and sets how many global roots\n     are created, so the host CPU count ends up in the image. Default\n     to 1; --num-global-roots still overrides it. extent-tree-v2 is\n     experimental, but the leak is real today.\n\n  2. BTRFS_FEATURE_INCOMPAT_BIG_METADATA was set from\n     sysconf(_SC_PAGE_SIZE): with the default 16K nodesize it was on for\n     4K-page hosts and off for 16K-page hosts (aarch64). The flag is not\n     a default feature and not -O-toggleable, so this is its only\n     setter; the kernel sets it on any modern filesystem anyway, and\n     only kernels older than Linux 3.4 (2012) lack it. Set it\n     unconditionally, which drops the page-size dependency and also\n     covers the 4K-nodesize case the old gate skipped.\n\nNeither change is gated by DETERMINISTIC_SEED; both fix cross-host\nconsistency regardless of reproducibility intent.\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "d5c6f6f055c0c9ec33b2ce131586b6178e44a759",
      "tree": "e12da53d30e8572fc09234cdb4470578fa9c32b3",
      "parents": [
        "6f05955d34efde41d9b8fe60fbaccc58bc540506"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Thu May 28 16:33:11 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: derive UUIDs deterministically from the fs UUID\n\nmkfs generates several internal UUIDs with uuid_generate(): every\ndevice\u0027s dev_item.uuid, the chunk-tree UUID, the FS_TREE subvolume UUID,\nand the per-subvolume UUIDs from the uuid-tree rebuild. All are random,\nso even with -U and SOURCE_DATE_EPOCH pinned, two runs with identical\ninputs differ. uuid_generate() reads the system CSPRNG and cannot be\nseeded, so it cannot be made deterministic in place.\n\nWhen DETERMINISTIC_SEED\u003d1 is set and a fixed UUID is given with -U (the\nxfsprogs convention), derive these UUIDs from the fs UUID. A plain copy\nof the seed will not do: an image holds several UUIDs that must stay\ndistinct on disk, so each is derived from a (role, key) pair in the\nfs-UUID namespace with libuuid\u0027s name-based (v5) generator:\n\n    uuid_generate_sha1(out, fs_uuid, le32(role) || le64(key))\n\nrole is an enum (chunk tree, subvolume, device) and key distinguishes\ninstances within a role (subvolume objectid, devid; ignored for the\nchunk-tree singleton). The name is serialized little-endian so the\nresult is the same on any host architecture.\n\nuuid_generate_sha1() has been in libuuid since util-linux 2.31 (2017),\nso configure.ac now requires uuid \u003e\u003d 2.31, like the version floors\nalready set for libzstd, libgcrypt and others.\n\nTwo helpers join reproducible_now() in common/reproducible.{c,h}:\nreproducible_is_deterministic() checks DETERMINISTIC_SEED \u003d\u003d \"1\", and\nreproducible_uuid_generate() derives the UUID in deterministic mode and\notherwise falls back to uuid_generate(). mkfs errors out if\nDETERMINISTIC_SEED\u003d1 is set without -U, since there is no seed to derive\nfrom.\n\nConverted call sites:\n\n  - mkfs/common.c btrfs_create_tree_root(): FS_TREE subvolume UUID.\n  - mkfs/common.c make_btrfs(): chunk_tree_uuid and device 1\u0027s\n    dev_item.uuid (used when --device-uuid is not given).\n  - common/device-scan.c btrfs_add_to_fsid(): per-device UUID for\n    devices 2..N.\n  - common/root-tree-utils.c rescan_subvol_uuid(): per-subvolume UUID\n    during the uuid-tree rebuild.\n\nOnly super.fsid is not derived; it is the seed, from -U (or random when\n-U is absent). A user-supplied --device-uuid still overrides device 1\nas before.\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "6f05955d34efde41d9b8fe60fbaccc58bc540506",
      "tree": "32d073edae328c22e86b1136d339bc01e7837b9a",
      "parents": [
        "02f81224de8365d1c766fcf8c15edc60e0075ef3"
      ],
      "author": {
        "name": "Leo Martins",
        "email": "loemra.dev@gmail.com",
        "time": "Thu May 28 16:32:20 2026 -0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: honor SOURCE_DATE_EPOCH for root-item timestamps\n\nmkfs stamps root-item timestamps with time(NULL), so every run embeds\nthe current wall clock and no two runs are bit-identical. Honor\nSOURCE_DATE_EPOCH when it is set in the environment, the standard\nreproducible-builds convention.\n\nAdd reproducible_now() in common/reproducible.{c,h}, which parses the\nvalue with parse_u64(). An empty value means unset, per the spec. An\ninvalid value is rejected with an error and a non-zero exit instead of\nfalling back, so a typo does not silently produce a non-reproducible\nimage.\n\nThe helper goes in common/ because it is also called from\ncommon/root-tree-utils.c, which is shared with other tools; later\npatches add more reproducibility helpers next to it.\n\nConvert the time(NULL) call sites:\n\n  - mkfs/common.c btrfs_create_tree_root(): FS_TREE root_item ctime and\n    otime.\n  - common/root-tree-utils.c btrfs_make_root_dir(): atime/ctime/mtime/\n    otime of the top inode of every root it creates (root_tree_dir,\n    fs_tree, each -u subvolume, the data-reloc tree).\n\nSigned-off-by: Leo Martins \u003cloemra.dev@gmail.com\u003e\n"
    },
    {
      "commit": "02f81224de8365d1c766fcf8c15edc60e0075ef3",
      "tree": "86fd9b30b7060e82b98d2bfed3ef67569c29e985",
      "parents": [
        "655c0efae236118474fa31d2530141e01b9b3808"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Sep 16 13:21:33 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: tests: add a test case for btrfs-restore\n\nThe new test case will:\n\n- Create an inlined compressed file extent\n- Generate checksum for that file\n- Use btrfs-restore to extract that file\n- Compare the extracted file with the generated checksum\n\nThe checksum should match.\n\nThis is a regression test for a behavior change in kernel, which results\nolder btrfs-restore unable to handle newerly created inlined compressed\nfile extents.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "655c0efae236118474fa31d2530141e01b9b3808",
      "tree": "7afd06d9af7fcc9cae952edcb0967a4ccac2417f",
      "parents": [
        "adae22ece3f6afba3572394b97c2dc3d22ffe8a0"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Sep 16 13:30:50 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: restore: handle inlined extent larger than 4K\n\nMost btrfs are already using 4K sectorsize, but for systems with 64K\npage size, it\u0027s possible to create large inlined extent that is larger\nthan 4K:\n\n\titem 6 key (257 EXTENT_DATA 0) itemoff 56802 itemsize 8213\n\t\tgeneration 9 type 0 (inline)\n\t\tinline extent data size 8192 ram_bytes 8192 compression 0 (none)\n\nIn that case, btrfs-restore will crash as its input buffer is only 4K\nsized.\n\nEnhance btrfs-restore to handle larger block size correctly, by allocate\na block-sized buffer at input buffer.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "adae22ece3f6afba3572394b97c2dc3d22ffe8a0",
      "tree": "b49f2d8b1ffd6ad25f2748b36b4aa3fba1349bb4",
      "parents": [
        "4da9b41bc931123c29b39555f08c46e0c4711388"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Sep 16 13:06:02 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: restore: handle full block compressed inline extent\n\nSince kernel commit 3eaf5f082c4c (\"btrfs: extract inlined creation into a\ndedicated delalloc helper\"), the creation of compressed inlined extent\nhas changed to compress the whole block, then truncate the ram_bytes to\nisize.\n\nThis means the compressed data needs to have a full block as the output\nbuffer.\nThis is fine for kernel, as the inlined extent is alwasy decompressed to\na folio which is at least one block sized.\n\nBut for progs, if the output buffer is smaller than a block, the\ndecompression will fail early (not enough output buffer), causing\nbtrfs-restore to completely skip the content of the inlined extent.\n\nFix it by always allocating a full block for copy_one_inline().\n\nIssue: #1171\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "4da9b41bc931123c29b39555f08c46e0c4711388",
      "tree": "20ed1cff8df9dbffe916ebe4bd88895bcc794285",
      "parents": [
        "0728f1455ba09721c61a537932f0d007672eaf26"
      ],
      "author": {
        "name": "Andrus Suvalau",
        "email": "andrus.suvalau@n-able.com",
        "time": "Mon Sep 28 17:10:04 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: make -O mixed-bg behave identically to --mixed\n\nMixed block groups can be requested either with the -M/--mixed flag or\nwith the -O mixed-bg filesystem feature.\n\nHowever using \"mkfs.btrfs -O mixed-bg\" results non-mixed block groups:\n\n Label:              (null)\n UUID:               8b6b2eaf-d399-4190-8b64-fcbed24f20fe\n Node size:          4096\n Sector size:        4096        (CPU page size: 4096)\n Filesystem size:    2.00GiB\n Block group profiles:\n   Data:             single            8.00MiB \u003c\u003c\u003c\n   Metadata:         DUP             102.38MiB \u003c\u003c\u003c\n   Data+Metadata:    single            8.00MiB\n   System:           DUP               8.00MiB\n\nAs \"-O mixed-bg\" option didn\u0027t properly set @mixed variable, thus\nregular non-mixed block groups are still created.\n\nFix it by setting @mixed if BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS feature\nis also set.\n\nSigned-off-by: Andrus Suvalau \u003candrus.suvalau@n-able.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n[ Update the commit message to show the problem more clearly ]\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Andrus Suvalau \u003candrus.suvalau@n-able.com\u003e\n"
    },
    {
      "commit": "0728f1455ba09721c61a537932f0d007672eaf26",
      "tree": "d92c6a45d61a36cf767c86a575a3e63228cee3db",
      "parents": [
        "d10186cd6c136d091c00b911684eba3497c56475"
      ],
      "author": {
        "name": "liuh0329",
        "email": "liuhuan01@kylinos.cn",
        "time": "Wed Sep 30 14:43:28 2026 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: receive: fix unused variable warning without LZO\n\nWhen btrfs-progs is built without LZO support, sector_shift is still\ndeclared in decompress_and_write(), while all its uses are guarded by\nCOMPRESSION_LZO. This results in an unused variable warning.\n\nMove the sector_shift calculation into the only user, which is already\nunder the \"#if COMPRESSION_LZO\" branch.\n\nFixes: 345731fff32d (\"btrfs-progs: receive: optional build for lzo, zstd\")\nSigned-off-by: liuh0329 \u003cliuhuan01@kylinos.cn\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n[ Remove the sector_shift declaration completely, as older toolchains\n  have older C-standard, which doesn\u0027t allow declaring a variable\n  inside a case branch. ]\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "d10186cd6c136d091c00b911684eba3497c56475",
      "tree": "5068ac6aab2de0d49ce6e13c4c08ae2689391695",
      "parents": [
        "dcc41ad6853de55d811abef680dae4167dd26d39"
      ],
      "author": {
        "name": "Johannes Thumshirn",
        "email": "johannes.thumshirn@wdc.com",
        "time": "Fri Sep 04 08:24:44 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: check: detect leaked active zones on zoned devices\n\nOn a zoned filesystem a sequential zone can end up open (and written) on\nthe device while it is not referenced by any dev extent and is not in a\nsb-log zone. Such a zone is unreferenced - its space is free according to\nthe device tree - yet it stays active on the device, permanently consuming\none of the device\u0027s limited active zones. On a device with few active\nzones this can lead to premature ENOSPC and/or allocation hangs.\n\nOne way to end up in this state is a mkfs that failed to reset a\ntemporary chunk\u0027s zone before finishing (fixed in a preceding commit).\nExisting filesystems created by such a mkfs need a way to detect and\nrepair the condition.\n\nAdd a zoned device specific check that cross-checks the on-disk metadata\nagainst the physical zone state of the device. It flags any written,\nsequential zone that is not backed by a dev extent, and in\n--repair mode resets it. The check is a no-op on non-zoned filesystems and\nruns as part of the extent/device checking rather than as a separate\nnumbered check phase.\n\nIntroduce check_zoned() as a entry point for future zoned device checks.\n\nSigned-off-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "dcc41ad6853de55d811abef680dae4167dd26d39",
      "tree": "c71a9c53b014308bc6cbe23fba58a05ee1b6d6d0",
      "parents": [
        "c60cb10f1414cea89faeb2da62bda216298e04ff"
      ],
      "author": {
        "name": "Johannes Thumshirn",
        "email": "johannes.thumshirn@wdc.com",
        "time": "Fri Sep 04 08:24:43 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: zoned: refresh stale cached zone state in btrfs_reset_dev_zone()\n\nbtrfs-progs reads the device zone layout once, in btrfs_get_zone_info() -\u003e\nreport_zones() when the device is opened, and caches it in \u0027zinfo-\u003ezones[]\u0027\nwithout ever refreshing it afterwards. btrfs_reset_dev_zone() skips\nresetting a zone whose cached condition is EMPTY, but that condition can be\nstale: a zone written after open, for example a temporary chunk that mkfs\nwrites and then removes, can still be cached as EMPTY. Its reset is then\nskipped and the zone is left open on the device, referenced by no chunk nor\ndev extent, permanently consuming one of the device\u0027s limited active zones.\nOn a device with few active zones this results in premature ENOSPC or an\nallocation hang.\n\nBefore skipping the reset of a supposedly empty zone, re-read its real\ncondition from the device and only skip if it is really empty.\n\nFixes: bfdb3ae23713 (\"btrfs-progs: zoned: reset zone of freed block group\")\nReported-by: Shin\u0027ichiro Kawasaki \u003cshinichiro.kawasaki@wdc.com\u003e\nSigned-off-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c60cb10f1414cea89faeb2da62bda216298e04ff",
      "tree": "45c8bf194e8b23db355b3a9b04c11beb73730d9a",
      "parents": [
        "1d16b6be5aca753b4cb015a2a7bff51f7d1b3555"
      ],
      "author": {
        "name": "Tom Hale",
        "email": "HaleTom@users.noreply.github.com",
        "time": "Wed Aug 26 07:06:06 2026 +0700"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: sb-mod: use per-type digest size for superblock csum\n\nThe global csum_size was hardcoded to the CRC32C digest size (4),\nwhile the actual checksum type is read from each superblock. For\nxxhash64 (8), sha256 (32) and blake2b (32), check_csum_superblock()\ncompared only the first 4 bytes and update_block_csum() wrote a\ntruncated digest into the zeroed csum field, producing superblocks\nthat dump-super reports as [DON\u0027T MATCH].\n\nReplace both uses with btrfs_csum_type_size(csum_type) and drop the\nnow-unused global.\n\nVerified against an xxhash64 filesystem: before the fix dump-super\nshows csum 0x7cbc602b00000000 [DON\u0027T MATCH], after the fix it shows\n0x7cbc602bf714f3a8 [match]; the kernel accepts the repaired\nsuperblock. See #1160.\n\nPull-request: #1161\nSigned-off-by: Tom Hale \u003ctom@hale.ee\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "1d16b6be5aca753b4cb015a2a7bff51f7d1b3555",
      "tree": "f1afb0540a17d2f7ed5c5768a4c27d5d0ce69e57",
      "parents": [
        "d80ead657bef7b493fffd95cc1fa3f381167a6c3"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Sep 08 22:03:19 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: sb-mod: add checksum type validation\n\nCheck that value stored in super block checksum type is supported\nbefore. As we allow to set csum_type it is possible to force an invalid\nvalue, as does the fuzz/010 test case.\n\nPreparatory work for pull request #1161 which removes the hardcoded\nCRC32C checksum type.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "d80ead657bef7b493fffd95cc1fa3f381167a6c3",
      "tree": "b3c355bbd12f15cbfd5eb0826366f5e5961b2341",
      "parents": [
        "7e9d83858ed21177a8bf7fe95dea38c3ebeec508"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Sep 08 22:22:54 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: tests: remove csum_type from fuzz/010 case\n\nAs the checksum is the used for primary verification, fuzzing it with\nthe whole set of operations will eventually hit an invalid value and\nprevent updating the superblock.\n\nThe only valid case is to set it to a different supported value, this\nwill recalculate the checksum and set it for the whole filesystem, but\nall metadata will mismatch. Related issue #1160.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "7e9d83858ed21177a8bf7fe95dea38c3ebeec508",
      "tree": "9fa0ce5f02a3b7542ae876ec8fe226459e9f9766",
      "parents": [
        "89bd519f1b89e822e9ed127264966a2199bab3a7"
      ],
      "author": {
        "name": "Wehrwolfmann",
        "email": "256216494+wehrwolfmann@users.noreply.github.com",
        "time": "Sat Aug 22 09:43:54 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "libbtrfsutil: don\u0027t leave subvolume iterator pointing at unfilled search buffer\n\nsubvolume_iterator_next_tree_search() sets nr_items to 4096 before\nBTRFS_IOC_TREE_SEARCH and returns BTRFS_UTIL_ERROR_SEARCH_FAILED without\nrestoring it when the ioctl fails. items_pos and buf_off stay at 0, so the\nnext call to btrfs_util_subvolume_iterator_next() takes the \u0027items_pos \u003c\nnr_items\u0027 branch and parses btrfs_ioctl_search_header structures out of a\nbuffer the failed ioctl never filled.\n\nEach phantom item advances buf_off by the header size plus the length read\nfrom the uninitialized memory, so the walk quickly leaves the 3992 byte\nbuffer; with 4096 items it ends about 128 KB past its start. Depending on\nwhat follows the buffer this either segfaults or spins on an unbounded\nnumber of bogus items.\n\nAn unprivileged caller reaches this easily: use_tree_search is true whenever\ntop !\u003d 0, so BTRFS_UTIL_SUBVOLUME_ITERATOR_* users that pass a subvolume id\ntake the TREE_SEARCH path, the iterator is created successfully, and the\nfirst ioctl then fails with EPERM.\n\nReset the entry on the error path so the search buffer is never parsed\nbefore an ioctl has filled it.\n\nPull-request: #1159\nIssue: #1158\nAssisted-by: LLM\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "89bd519f1b89e822e9ed127264966a2199bab3a7",
      "tree": "d84974ea0c96f43ff0562403d4ff9e700eb0548b",
      "parents": [
        "5c3fce12aae2443527e611f89e0a32817af51ee8"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Aug 12 10:23:17 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: docs: add a note about RW degraded mount\n\nWhen a new chunk is allocated during a RW degraded mount, btrfs can\nallocate new chunks with other profiles, like SINGLE, if the current\ndevices can no longer support the original profile.\n\nThis can cause unexpected chunk profiles, and the end user is\nrecommended to balance them out if they want to maintain the current\nallocation profile.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "5c3fce12aae2443527e611f89e0a32817af51ee8",
      "tree": "fa1256fcf43f864cbd0262705330dd9cec661d26",
      "parents": [
        "c9f0d0e9fba5ce7d0be67d1338547e926c5324ac"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Aug 18 15:34:07 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: tests: add case for unexpected file extent items\n\nThe image is created using btrfs-corrupt-block, the fs tree leaf looks\nlike this:\n\n\titem 0 key (256 INODE_ITEM 0) itemoff 16123 itemsize 160\n\t\tgeneration 3 transid 9 size 12 nbytes 16384\n\t\tblock group 0 mode 40755 links 1 uid 0 gid 0 rdev 0\n\t\tsequence 1 flags 0x0(none)\n\titem 1 key (256 INODE_REF 256) itemoff 16111 itemsize 12\n\t\tindex 0 namelen 2 name: ..\n\titem 2 key (256 DIR_ITEM 496027801) itemoff 16075 itemsize 36\n\t\tlocation key (257 INODE_ITEM 0) type BLKDEV \u003c\u003c\u003c\n\t\ttransid 9 data_len 0 name_len 6\n\t\tname: foobar\n\titem 3 key (256 DIR_INDEX 2) itemoff 16039 itemsize 36\n\t\tlocation key (257 INODE_ITEM 0) type BLKDEV \u003c\u003c\u003c\n\t\ttransid 9 data_len 0 name_len 6\n\t\tname: foobar\n\titem 4 key (257 INODE_ITEM 0) itemoff 15879 itemsize 160\n\t\tgeneration 9 transid 9 size 8192 nbytes 8192\n\t\tblock group 0 mode 60660 links 1 uid 0 gid 0 rdev 0 \u003c\u003c\u003c\n\t\tsequence 2 flags 0x0(none)\n\titem 5 key (257 INODE_REF 256) itemoff 15863 itemsize 16\n\t\tindex 2 namelen 6 name: foobar\n\titem 6 key (257 EXTENT_DATA 0) itemoff 15810 itemsize 53\n\t\tgeneration 9 type 1 (regular)\n\t\textent data disk byte 13631488 nr 8192\n\t\textent data offset 0 nr 8192 ram 8192\n\t\textent compression 0 (none)\n\nThe image is generated by the following steps:\n\n  # mkfs.btrfs -f $dev\n  # mount $dev $mnt\n  # xfs_io -f -c \"pwrite 0 4k\" $mnt/foobar\n  # umount $mnt\n\n  ## Change the inode\u0027s mode from REG to BLK\n  # btrfs-corrupt-block -i 257 -f mode --value 25008 $dev\n\n  ## Change the dir item\u0027s flag from REG to BLK\n  # btrfs-corrupt-block -D 256,84,496027801 -f flags --value 4 $dev\n\n  ## Change the dir index\u0027s flag from REG to BLK\n  # btrfs-corrupt-block -D 256,96,2 -f flags --value 4 $dev\n\nThe inode\u0027s mode and dir flags all match, but there is one unexpected\nfile extent item there.\n\nBoth lowmem and original mode should detect such problem.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c9f0d0e9fba5ce7d0be67d1338547e926c5324ac",
      "tree": "e9a0d0006c33c7b530830e5ac883ff9e3373b048",
      "parents": [
        "2c9d78f673d8364ce86f684b2d766e74be504551"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Aug 18 15:19:05 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: check: detect invalid file extent items\n\nFile extent items should only exist for regular and symlink inodes.\nAnd for symlink inodes, the file extent must be inlined.\n\nAdd such check for lowmem mode to detect those invalid file extents.\n\nNow for a corrupted image with the following fs tree layout:\n\n\titem 0 key (256 INODE_ITEM 0) itemoff 16123 itemsize 160\n\t\tgeneration 3 transid 9 size 12 nbytes 16384\n\t\tblock group 0 mode 40755 links 1 uid 0 gid 0 rdev 0\n\t\tsequence 1 flags 0x0(none)\n\titem 1 key (256 INODE_REF 256) itemoff 16111 itemsize 12\n\t\tindex 0 namelen 2 name: ..\n\titem 2 key (256 DIR_ITEM 496027801) itemoff 16075 itemsize 36\n\t\tlocation key (257 INODE_ITEM 0) type BLKDEV\n\t\ttransid 9 data_len 0 name_len 6\n\t\tname: foobar\n\titem 3 key (256 DIR_INDEX 2) itemoff 16039 itemsize 36\n\t\tlocation key (257 INODE_ITEM 0) type BLKDEV\n\t\ttransid 9 data_len 0 name_len 6\n\t\tname: foobar\n\titem 4 key (257 INODE_ITEM 0) itemoff 15879 itemsize 160\n\t\tgeneration 9 transid 9 size 8192 nbytes 8192\n\t\tblock group 0 mode 60660 links 1 uid 0 gid 0 rdev 0\n\t\tsequence 2 flags 0x0(none)\n\titem 5 key (257 INODE_REF 256) itemoff 15863 itemsize 16\n\t\tindex 2 namelen 6 name: foobar\n\titem 6 key (257 EXTENT_DATA 0) itemoff 15810 itemsize 53\n\t\tgeneration 9 type 1 (regular)\n\t\textent data disk byte 13631488 nr 8192\n\t\textent data offset 0 nr 8192 ram 8192\n\t\textent compression 0 (none)\n\nLowmem mode will detect the error like the following:\n\n  [5/8] checking fs roots\n  ERROR: root 5 ino 257 should not have file extent\n  ERROR: root 5 INODE[257] nbytes 8192 not equal to extent_size 0\n  ERROR: errors found in fs roots\n  found 172032 bytes used, error(s) found\n\nFor the original mode, it\u0027s less strict than the lowmem mode, and it\nonly rejects the obvious cases, without the extra verification on\ninlined extent for symlinks:\n\n  [5/8] checking fs roots\n  root 5 inode 257 errors 40, bad file extent\n  ERROR: errors found in fs roots\n  found 172032 bytes used, error(s) found\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "2c9d78f673d8364ce86f684b2d766e74be504551",
      "tree": "c1d13ba952913d0cb1a9e6667ca32d71808c91c4",
      "parents": [
        "cad9cae5b8218eb946794188b3d3be80f3a361e1"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Aug 18 15:05:10 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: corrupt-block: allow corrupting dir item flags\n\nWith this feature and the previous inode corruption, we can change the\ntype in inode item, dir item, dir index to be consistent with each\nother.\n\nAssisted-by: LLM (coding)\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "cad9cae5b8218eb946794188b3d3be80f3a361e1",
      "tree": "20d0e3888f88a171a2e2dfa50e3b5524953e7f1e",
      "parents": [
        "c4d0b6fc89b7abd2165ce4c9821f094aae2619df"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Aug 18 15:00:15 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: corrupt-block: allow dir item corruption to use --value option\n\nFor now this only affects DIR_ITEM location objectid corruption, but\nlater this will be utilized for more dir item member corruption.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c4d0b6fc89b7abd2165ce4c9821f094aae2619df",
      "tree": "457db1380cece88607c0684fd9ffebfc9d1ead52",
      "parents": [
        "53945d6808c6081e3cc952b53f06327314b6453e"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Aug 18 14:51:56 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: corrupt-block: allow inode corruption to use --value option\n\nThis allows us to do more accurate inode item corruption, not only to\ninject random number, but more targeted values.\n\nThis feature will be later utilized to change inode\u0027s mode from REG to\nBLK.\n\nAssisted-by: LLM (coding)\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "53945d6808c6081e3cc952b53f06327314b6453e",
      "tree": "eb4e1d6d4ec74e1e6dcc38caa21a95b199338a69",
      "parents": [
        "4cf9ff0e26d1ba15db6d8686b37f594411cc2816"
      ],
      "author": {
        "name": "koraynilay",
        "email": "koray.fra@gmail.com",
        "time": "Fri Aug 21 00:08:30 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:14 2026 +0200"
      },
      "message": "btrfs-progs: set creation/change time (otime/ctime) of offline-created subvolumes\n\nUpdate common/root-tree-utils.c\u0027s btrfs_make_subvolume() to also\ngenerate a UUID and set otime and ctime of subvolumes created offline\n(if it\u0027s a normal subvolume).\n\nThis is essentially the same change as commit (\"btrfs-progs: convert:\nset creation/change time (otime/ctime) of root subvol\") but that applies to:\n\n* mkfs.btrfs\u0027 --rootdir and --subvol options\n* btrfs-convert\u0027s ext2_saved subvolume\n\nPull-request: #1157\nAssisted-by: Gemini:3.1-pro antigravity-cli-1.1.7\nSigned-off-by: koraynilay \u003ckoray.fra@gmail.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n[ Remove the duplicated \u003cstring.h\u003e header inclusion ]\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "4cf9ff0e26d1ba15db6d8686b37f594411cc2816",
      "tree": "7769f39cd866b8c1141e42e98062ff54b5486cfa",
      "parents": [
        "dc8300387c3ecffc4ad05d5c14e753ce5921b3d0"
      ],
      "author": {
        "name": "koraynilay",
        "email": "koray.fra@gmail.com",
        "time": "Thu Aug 20 19:33:44 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:13 2026 +0200"
      },
      "message": "btrfs-progs: convert: set creation/change time (otime/ctime) of root subvol\n\nBefore this, btrfs-convert would leave the root subvol of the converted\nfs with 0 as both otime and ctime, showing \"-\" when using\nbtrfs subvolume show /path.\n\nThis patch uses the code from mkfs.btrfs\u0027s btrfs_create_tree_root() to\nset the otime/ctime to the root subvol and generate its UUID right away\n(instead of having to wait for btrfs_rebuild_uuid_tree(), not\nnecessarily needed but cleaner).\n\nThis way the timestamp of the filesystem conversion will be available in\nthe \"Creation time\" field of btrfs subvolume show /path output, while\nthe original ext* \"Filesystem created\" timestamp is available with stat\nas the mountpoint\u0027s birth time.\n\nPull-request: #1157\nAssisted-by: Claude:opus-4.6 antigravity-cli-1.1.7\nAssisted-by: Gemini:3.1-pro antigravity-cli-1.1.7\nSigned-off-by: koraynilay \u003ckoray.fra@gmail.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n[ Remove the duplicated \u003ctime.h\u003e header inclusion ]\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "dc8300387c3ecffc4ad05d5c14e753ce5921b3d0",
      "tree": "671912e2891ce97375c2df4dad476784ea9376ad",
      "parents": [
        "bc305d07ee672ffc51483f14fdb8b50513456b04"
      ],
      "author": {
        "name": "koraynilay",
        "email": "koray.fra@gmail.com",
        "time": "Thu Aug 20 18:50:01 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:13 2026 +0200"
      },
      "message": "btrfs-progs: subvolume show: fix \"Creation time\" value being shown for \"Send time\" too\n\nThe send time would be printed before updating tstr, which is previously used\nto store the string for the subvol creation time, thus showing an incorrect\nsend time.\n\nSigned-off-by: koraynilay \u003ckoray.fra@gmail.com\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "bc305d07ee672ffc51483f14fdb8b50513456b04",
      "tree": "2c3781078ce45e62bbef9aae02e992dd8bf9bb3d",
      "parents": [
        "9f5795ebed9c8a943734ede1a5289f42ebc94f1d"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Aug 18 10:55:34 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: drop stable 5.4 heading from feature overview\n\nThe stable version headings are anchors for currently active stable\nversions, 5.4 is not anymore. As the entries are short it\u0027s easy to look\nup a particular version if needed.\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "9f5795ebed9c8a943734ede1a5289f42ebc94f1d",
      "tree": "c0f521f15831241e8c6f3507629cd5656b842445",
      "parents": [
        "9764396c3d87f8a1613010c2e422e13ab0177db0"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Aug 18 10:43:27 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:13 2026 +0200"
      },
      "message": "btrfs-progs: ci: update image administration steps\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "9764396c3d87f8a1613010c2e422e13ab0177db0",
      "tree": "1b0b763f47fdb7740f8ed52a411bfd4ce91aad4b",
      "parents": [
        "6aa8bed5a9d2a32265edca2b1e7fe6612a140ae6"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Tue Aug 18 10:15:15 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: clarify Deduplication\n\nBased on question and answer in the issue, udpate the initial paragraph.\nMention that we now have access to raw checksums too.\n\n[ci skip]\n\nIssue: #1137\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "6aa8bed5a9d2a32265edca2b1e7fe6612a140ae6",
      "tree": "76688fd02e0dbbfca89ec2770756588fb4e3b96a",
      "parents": [
        "473c544d802e7d25760cb5b14473a35af1570624"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 15 15:00:15 2024 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 19:01:08 2026 +0200"
      },
      "message": "btrfs-progs: docs: add kernel changelog for 7.2\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "473c544d802e7d25760cb5b14473a35af1570624",
      "tree": "996db81dce6b516cf300985e7b3cea14051bf88d",
      "parents": [
        "147570b78bb5358bd3ad04898f4e25b92ff7256a"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Aug 17 19:46:51 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: update list of experimental features\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "147570b78bb5358bd3ad04898f4e25b92ff7256a",
      "tree": "f447b57b5a57c3873f8bb12f99e51d9e3a897de7",
      "parents": [
        "031d64b8dda6f04de75050e91659574309ff768b"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Feb 09 20:25:54 2026 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: update kernel features for 7.2\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "031d64b8dda6f04de75050e91659574309ff768b",
      "tree": "13ea7d8a59c640784383697ce8f74ff3fc22351f",
      "parents": [
        "4aebcc8b84cee945fe816ba3a310e46297dbfc46"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jun 17 01:17:09 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: update Status page\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "4aebcc8b84cee945fe816ba3a310e46297dbfc46",
      "tree": "c9a501d847efbed9b7c106900ad2f5766de67a2c",
      "parents": [
        "23c712f2ba3082498db6db17e9e0b87146ec179a"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Mar 21 00:59:22 2025 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: update 7.2 contribution graphs\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "23c712f2ba3082498db6db17e9e0b87146ec179a",
      "tree": "0379893045b14d199a7ccc161f282ccc4cf1887b",
      "parents": [
        "2197d3a85d4be928d18f512c2c76ae45af562524"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jun 17 01:24:08 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: add 7.2 kernel development statistics\n\n[ci skip]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "2197d3a85d4be928d18f512c2c76ae45af562524",
      "tree": "f14ea8ed519cfb0b17f8f4077e2ecfe7aa9fdb57",
      "parents": [
        "4fdbec79fd6453c61cd7f87d2cd2765bf4b512f4"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Aug 17 15:29:06 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: fix typos or spelling\n\nManual pass over all sources to fix things not reported by codespell.\nRaw spellcheck used.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "4fdbec79fd6453c61cd7f87d2cd2765bf4b512f4",
      "tree": "88aae1c4772267e643ff2f79abe03b121cd6c5a0",
      "parents": [
        "56c6bef3409cd123daddcf677c878e14342405e7"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Mon Aug 03 10:05:22 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: docs: update the stability on btrfs-quota\n\nThe core design of btrfs qgroup mode is to track the ownership of every\nextent accurately, but that is conflicting with snapshots, which can\nchange the ownership of tons of extents in a very short time, during\nsnapshot creation and deletion.\n\nAlthough qgroup mode has several workarounds, it is not fully resolved\nand still introduces extra costs, e.g. requires frequent rescan,\nbreaking limits etc.\n\nSo make it more clear that qgroup mode is not recommended until the end\nuser has a rigid subvolume layout, e.g. no more new subvolume/snapshots,\nnor deletion of any existing subvolume.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "56c6bef3409cd123daddcf677c878e14342405e7",
      "tree": "769a43e72c2d7b394ad0263e081b930e5ccac286",
      "parents": [
        "8e580be4fd9e98a94a2784c76457a9bd7f7ed0b0"
      ],
      "author": {
        "name": "Sidong Yang",
        "email": "sidong.yang@furiosa.ai",
        "time": "Tue Aug 04 12:39:15 2026 +0000"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: fix-data-checksum: fix an off-by-one error in the mirror bitmap\n\n[BUG]\nWith both mirrors of a DUP data block corrupted, only the first one shows\nup in the report:\n\n  # btrfs rescue fix-data-checksum dup.img\n\n  logical\u003d84082688 corrtuped mirrors\u003d1 affected files:\n    (subvolume 5)/file2\n\nWhile both mirrors have a checksum mismatch, so the expected output is:\n\n  logical\u003d84082688 corrtuped mirrors\u003d1,2 affected files:\n    (subvolume 5)/file2\n\n[CAUSE]\nThe error mirror bitmap uses bit 0 for mirror 1, as documented in struct\ncorrupted_block, and add_corrupted_block() does that conversion when it\nallocates a new entry:\n\n  set_bit(mirror - 1, last-\u003eerror_mirror_bitmap);\n\nBut when an entry for the same logical bytenr already exists, the mirror\nnumber is used as the bit number directly:\n\n  set_bit(mirror, last-\u003eerror_mirror_bitmap);\n\nThe first corrupted mirror of a block always goes through the allocation\npath, so only the second and any following one are affected, and their bit\nends up one position too high.\n\nFor the last mirror this means bit @num_mirrors gets set, which is beyond\nthe range report_corrupted_blocks() walks, so the mirror is dropped from\nthe report. For the other mirrors the number reported is one larger than\nthe corrupted one, e.g. on a RAID1C3 block with mirrors 1 and 2 corrupted\nthe report claims mirrors 1 and 3, marking the only intact mirror as bad.\n\nThis is more than a cosmetic problem, as the report is what the user bases\nthe mirror choice on in the interactive mode. Picking a mirror that is\nreported as intact but is in fact corrupted updates the checksum item to\nmatch the corrupted data, making the corruption permanent.\n\n[FIX]\nConvert the mirror number to a bit number the same way the allocation path\ndoes.\n\nFixes: 0e999c9bd3e7 (\"btrfs-progs: introduce \"btrfs rescue fix-data-checksum\"\")\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Sidong Yang \u003csidong.yang@furiosa.ai\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "8e580be4fd9e98a94a2784c76457a9bd7f7ed0b0",
      "tree": "4db5ef83441f0fc3f1fd96abca8bdcf3148773d0",
      "parents": [
        "528b6f4c77c349a2fc7414e62da3a7a5defe94d8"
      ],
      "author": {
        "name": "Sidong Yang",
        "email": "sidong.yang@furiosa.ai",
        "time": "Tue Aug 04 12:36:17 2026 +0000"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: fix-data-checksum: fix the size of the error mirror bitmap\n\n[BUG]\nRunning \"btrfs rescue fix-data-checksum\" on a filesystem with a data\nchecksum mismatch triggers a heap buffer overflow:\n\n  \u003d\u003d3692\u003d\u003dERROR: AddressSanitizer: heap-buffer-overflow on address 0x502000000190\n  READ of size 8 at 0x502000000190 thread T0\n      #0 set_bit kernel-lib/bitops.h:32\n      #1 add_corrupted_block cmds/rescue-fix-data-checksum.c:99\n      #2 verify_one_data_block cmds/rescue-fix-data-checksum.c:143\n      #3 iterate_one_csum_item cmds/rescue-fix-data-checksum.c:178\n      #4 iterate_csum_root cmds/rescue-fix-data-checksum.c:252\n      #5 btrfs_recover_fix_data_checksum cmds/rescue-fix-data-checksum.c:510\n  0x502000000191 is located 0 bytes after 1-byte region [0x502000000190,0x502000000191)\n  allocated by thread T0 here:\n      #0 calloc\n      #1 add_corrupted_block cmds/rescue-fix-data-checksum.c:94\n\n[CAUSE]\nBITS_TO_LONGS() returns the number of unsigned longs needed to hold the\ngiven amount of bits, not the number of bytes. But the value is passed as\nthe byte size to calloc():\n\n  last-\u003eerror_mirror_bitmap \u003d calloc(1, BITS_TO_LONGS(num_mirrors));\n\nFor any sane number of mirrors this allocates a single byte, while\nset_bit() accesses the bitmap in unsigned long units, thus reading and\nwriting 8 bytes out of a 1 byte allocation.\n\n[FIX]\nUse bitmap_zalloc() from kernel-lib/bitmap.h, which does the size\ncalculation for the caller, and pair it with bitmap_free() when the\nrecord is released.\n\nFixes: 0e999c9bd3e7 (\"btrfs-progs: introduce \"btrfs rescue fix-data-checksum\"\")\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Sidong Yang \u003csidong.yang@furiosa.ai\u003e\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "528b6f4c77c349a2fc7414e62da3a7a5defe94d8",
      "tree": "97ed26c833100e10b987213230a4aba215784a12",
      "parents": [
        "e2e0cf23ec4944bdac7a55ba0116a71629933ce7"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Thu Aug 06 18:43:09 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: remove unnecessary forced type casting in print-tree.c\n\nIn kernel-shared/print-tree.c, we have a lot of forced type casting to\n\"(unsigned long long)\" for the format \"%llu\", no matter if the original\nvalue is really u64.\n\nChange all those forced type casting used in printing functions, to use\nthe correct native type instead.\n\nAssisted-by: LLM (coding)\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n[ reformat short lines ]\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "e2e0cf23ec4944bdac7a55ba0116a71629933ce7",
      "tree": "1dd180cf870b57f71f59431880a6ca8b34528949",
      "parents": [
        "306130cb85bbd75fbdc25d255eb14b5d8997c9ee"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Aug 03 13:04:11 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: tests: update bash style guide\n\n[ ci skip ]\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "306130cb85bbd75fbdc25d255eb14b5d8997c9ee",
      "tree": "7cc6fd465e6c3791e9d29fb8546eb81e5989bf07",
      "parents": [
        "5cb6330a31d3099b717cab26a10c4e6adf047590"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Jul 31 18:42:39 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: tests: cleanup bash style in ./common\n\n- use [[ ]]\n- use $* or [*] inside string\n- add missing quotes\n- visual style fixups\n- arithmetic expression simplifications\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "5cb6330a31d3099b717cab26a10c4e6adf047590",
      "tree": "d3d1e04ed6a78a0f11de6dfc820552e5a59b3e04",
      "parents": [
        "b1ae4add3c0f59fa2ba59698297c7eb678a7cad1"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Jul 31 18:00:10 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:13 2026 +0200"
      },
      "message": "btrfs-progs: tests: cleanup bash style in common scripts\n\n- use [[ ]]\n- use $* inside string\n- visual style fixups\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "b1ae4add3c0f59fa2ba59698297c7eb678a7cad1",
      "tree": "455b4e1b02fd9683436b1e1e0bda103fc642e491",
      "parents": [
        "c9e7e52dd509099a0856ede947d3ace6899c3ea0"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Jul 31 17:32:57 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 18:40:08 2026 +0200"
      },
      "message": "btrfs-progs: tests: cleanup bash style in driver scripts\n\n- use [[ ]]\n- use $* inside string\n- use \"\u003d\" for simple comparisons\n- add missing quotes\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c9e7e52dd509099a0856ede947d3ace6899c3ea0",
      "tree": "a643062673db5857990fe84beaa8b79ca2ed8d71",
      "parents": [
        "8baf4a8cbb1cf2d758c0751c939c51f53b1871c1"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Thu Jul 23 12:31:49 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: drop type casts from set/get_label calls\n\nThe helpers set_label() and get_label() take const parameters and the\narguments are also const so it\u0027s not necessary to cast them, probably\nsome leftover from the past.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "8baf4a8cbb1cf2d758c0751c939c51f53b1871c1",
      "tree": "68a656841d20254ccdb59f56fe2be50b89e6a872",
      "parents": [
        "f7035152228768a0328aed3be277b113c86b300f"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Thu Jul 23 12:14:08 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: receive: use correct type for pwrite in process_write()\n\npwrite() return value will fit \u0027int\u0027 most of the time, but we should use\nthe correct type for consistency.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "f7035152228768a0328aed3be277b113c86b300f",
      "tree": "7e8757fb528b65b788ef7dc5fe02ef4cb6e1e2b4",
      "parents": [
        "1b356fef9e7e6034309339a66d53451c4ddb4417"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Thu Jul 23 12:11:23 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: receive: handle writes of 0 bytes\n\nIf pwrite() writes 0 bytes for some reason the loop will become\ninfinite. While this is unlikely to happen, this is a condition hard to\ndetect so we better handle it.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "1b356fef9e7e6034309339a66d53451c4ddb4417",
      "tree": "f80c6792191331916fc76330a2e3feac633101b9",
      "parents": [
        "e1de3ac30d4692ea01c4e2322a119bee35b00f09"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Thu Jul 23 11:52:47 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: fix assigning negative errno\n\nAs we use negative errno in many places, there were two conversion that\nassigned a negative value there, which is wrong.\n\nNote that in many other places we do \u0027errno \u003d ret\u0027 but that\u0027s for\npthread_* or posix_memalign() functions that return errno directly.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "e1de3ac30d4692ea01c4e2322a119bee35b00f09",
      "tree": "87ef006064396aebe65a9bf1d4d252ad8f9310d1",
      "parents": [
        "2d15b425de737d1b13487d63974cb09fda9a13ee"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Thu Jul 23 10:38:06 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: use full size path buffer in cmd_subvolume_delete()\n\nCommit d544db2078fd43 (\"btrfs-progs: unify naming of return values in\ncmd_subvolume_create()\") converted the unchecked sprintf to path API but\nthe full_subvolpath is actually shorter than PATH_MAX. This could lead\nto stack overflow for a really long path.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "2d15b425de737d1b13487d63974cb09fda9a13ee",
      "tree": "09c5e9ff45b946b137be18bca1e7cb361b018742",
      "parents": [
        "2d900bfb4aecf83161ce0dfc5c425caab36ef7ae"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 22 18:32:53 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: use path API to build subvolume paths\n\nThere\u0027s open coded path concatenation using raw str* functions, we have\nthe path API for that.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "2d900bfb4aecf83161ce0dfc5c425caab36ef7ae",
      "tree": "116d459a6021e0d2fbb4ead0c7f52b79a82db568",
      "parents": [
        "5f994da05ed8458f21d239f4e55a5168fa0904d4"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 22 13:44:52 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: use parse_u64() in cmd_subvolume_sync()\n\nUse our helper to avoid intricacies of strtoull().\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "5f994da05ed8458f21d239f4e55a5168fa0904d4",
      "tree": "dbea04486953271967a9d0a4e10e79364ec520b2",
      "parents": [
        "d9888badfc091ccf8a5623955e3f02a19481464a"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 22 13:37:43 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: reset errno before strtoull() when parsing numbers\n\nOn success strtoull() does not change the errno, so we have to reset it\nnot to read any stale value.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "d9888badfc091ccf8a5623955e3f02a19481464a",
      "tree": "2b4c1b568e9a44c35230ed09bf39f1499a91b54f",
      "parents": [
        "66cd50af2159bdb4e75d7b817ab12ad7218b30bb"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 22 13:32:01 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: don\u0027t reuse filesystem fd for sysfs files\n\nSysfs helpers reuse the input file descriptor of the filesystem for the\nsysfs files, as this is one time read. For clarity use two variables for\nthat.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "66cd50af2159bdb4e75d7b817ab12ad7218b30bb",
      "tree": "ce97a274cfce995390b9ee198d22b87b32c6c6c3",
      "parents": [
        "f1d3d41a48dff32db028ead0e39fb0ea230e909f"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 22 13:13:02 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:53 2026 +0200"
      },
      "message": "btrfs-progs: handle strdup() failures\n\nThere are many unhandled calls to strdup(), while this almost never\nfails we still want to handle all runtime errors.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "f1d3d41a48dff32db028ead0e39fb0ea230e909f",
      "tree": "175056feec72fcfd3ce909bd0ba3d5e52630b34d",
      "parents": [
        "656a78918310e57e0ec7ff65ce0a54f949cd6f80"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Jul 08 15:56:04 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Oct 23 17:45:42 2026 +0200"
      },
      "message": "btrfs-progs: tests: replace deprecated standalone \"usebackuproot\" option\n\nThat option is already marked deprecated a long time ago, and is going to\nbe completely removed in v7.3.\n\nUpdate the test case to auto-detect if the running kernel has support\nfor \"rescue\u003dusebackuproot\", and if not skip the test case.\n\nFurthermore, since v7.3 all \"rescue\u003d\" mount options, including\n\"rescue\u003dusebackuproot\" will require full RO mount, also add \"ro\" mount\noption to the test run.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "656a78918310e57e0ec7ff65ce0a54f949cd6f80",
      "tree": "e8ce676ef68f48c77360dc1d10398df0c7180c2c",
      "parents": [
        "e3713305a0238f75ddcd66552cf9e5058e282c72"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Sat Jul 04 18:35:30 2026 +0930"
      },
      "committer": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Jul 21 08:40:32 2026 +0930"
      },
      "message": "btrfs-progs: docs: mark \"usebackuproot\" mount option as removed\n\nSince the kernel patch is going to land in v7.3, update the man page to\nreflect that change.\n\nAlso, just in case end users are using the latest progs but on a much\nolder kernel, keep the \"usebackuproot\" mount option entry, but\nexplicitly mark it as \"removed\", along with the history of deprecation.\n\nReviewed-by: Johannes Thumshirn \u003cjoahnnes.thumshirn@wdc.com\u003e\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "e3713305a0238f75ddcd66552cf9e5058e282c72",
      "tree": "aeaf8f7d750270327d1bee1d715770a97e262c23",
      "parents": [
        "253ffbd0e174c36eeb7db1f49100c998de7854f7"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Wed Jul 01 09:20:39 2026 +0930"
      },
      "committer": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Jul 21 08:26:16 2026 +0930"
      },
      "message": "btrfs-progs: update the direct IO behavior notes for version 7.3\n\nSince v7.3 will use IOMAP_DIO_BOUNCE flag to address the performance\ndrop of falling back to buffer IO, update the direct IO behavior notes\nto avoid confusion.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "253ffbd0e174c36eeb7db1f49100c998de7854f7",
      "tree": "50b7ee38ba82a53fddf400941cf1534fe66c4e94",
      "parents": [
        "2098831a3e598ff60e79f418cd520c5d3a4f0785"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Sat Jun 27 14:00:49 2026 +0930"
      },
      "committer": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Jul 21 08:19:40 2026 +0930"
      },
      "message": "btrfs-progs: sync BTRFS_FEATURE_INCOMPAT_SUPP_STABLE from the kernel\n\nUnlike kernel, btrfs-progs was using explicit definitions for\nexperimental and regular builds.\n\nThis makes maintaining them much harder, since there are already 14\ndifferent features just for non-experimental builds.\n\nSimplify the definition by pulling BTRFS_FEATURE_INCOMPAT_SUPP_STABLE\nfrom kernel, and only add new features into experimental builds based on\nthat BTRFS_FEATURE_INCOMPAT_SUPP_STABLE macro.\n\nThis also addresses a small feature mismatch, the feature\nraid-stripe-tree is still experimental in the kernel, and all involved\nfeature flags are also only defined for experimental progs builds, but\nit\u0027s still defined as supported feature.\n\nNow progs will share the same feature as kernels, for both experimental\nand regular builds.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "2098831a3e598ff60e79f418cd520c5d3a4f0785",
      "tree": "91be46d338e63749e18ce00d50a1fbf886ea97d2",
      "parents": [
        "399fe1dded4247ca1192c65b4f6147562bb8e0b0"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Sat Jun 27 13:51:53 2026 +0930"
      },
      "committer": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Tue Jul 21 08:19:40 2026 +0930"
      },
      "message": "btrfs-progs: remove out-of-data comments on free space tree\n\nBtrfs-progs has read-write support for free-space-tree since commit\nf46b08f3ab69 (\"btrfs-progs: Add freespace tree as compat_ro supported\nfeature\").\n\nThe out-of-date comment no longer makes any sense, just remove it.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "399fe1dded4247ca1192c65b4f6147562bb8e0b0",
      "tree": "b3f772c8d1738ddc5e5ca30c0b88eca8fb9dc518",
      "parents": [
        "d3a8b7c3ab9486de173309eb8cb42a5a24b42810"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 12:21:10 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 12:24:37 2026 +0200"
      },
      "message": "btrfs-progs: tests: don\u0027t use eval in mkfs/014 for file filler\n\nWhile the \u0027eval printf\u0027 is safe here, let\u0027s avoid it and use a different\nway based on zero prefix of decimal values.\n\nThe other use of \u0027eval\u0027 is in the interactive test console which is not\nran during the testsuite and only meant for local prototyping.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "d3a8b7c3ab9486de173309eb8cb42a5a24b42810",
      "tree": "e13c2dba25c111f77d18835b149c35eb10aef840",
      "parents": [
        "c57c75ef0038a110a27ca0bbe4fbe3e362076f80"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 12:01:23 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 12:05:34 2026 +0200"
      },
      "message": "btrfs-progs: tests: fix simple shellcheck warnings in test cases\n\n- add quotes where missing (variables, arrays, ...)\n- use $(...) instead of `....`\n- use {..} ranges instead of seq or ((...))\n- add command prerequisites\n- minor style fixups\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "c57c75ef0038a110a27ca0bbe4fbe3e362076f80",
      "tree": "f19209a5e8e75b7f23f33d9cf068088f53f44690",
      "parents": [
        "294765a7a5c5b8c2f2a2f7b56536b6beb1daecc1"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 10:29:04 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 10:29:04 2026 +0200"
      },
      "message": "btrfs-progs: tests: fix ctime check in convert/019\n\nThis seems to be a copy\u0026paste error, stat format %z is ctime and this is\nalso reported in the failure. Use the correct variable.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "294765a7a5c5b8c2f2a2f7b56536b6beb1daecc1",
      "tree": "0a678afbcbb5cf26fc23a6838958d643d8c81867",
      "parents": [
        "a6d40621603d1aa8dd3c53caf9b134266a36e604"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 10:28:23 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 10:28:23 2026 +0200"
      },
      "message": "btrfs-progs: tests: remove unused variables from test cases\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "a6d40621603d1aa8dd3c53caf9b134266a36e604",
      "tree": "9eb27f92dbebb9db525bf0a4d921f01b709d5cae",
      "parents": [
        "3f6fe17aedf26a6b66b6a9143701df50c254bc47"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 10:25:26 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 10:25:26 2026 +0200"
      },
      "message": "btrfs-progs: tests: assign default size value directly in prepare_test_dev()\n\nShellcheck is slightly confused by the way the size is assigned the\ndefault value, in a separate statement. Do it directly in the local\ndeclaration.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "3f6fe17aedf26a6b66b6a9143701df50c254bc47",
      "tree": "e0f02169872b18d1cc4d74a565a7dea9b5ced061",
      "parents": [
        "83be5236415f4ffcc7579dea91c1d7d8c7662ea3"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 08:21:06 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Mon Jul 20 08:22:39 2026 +0200"
      },
      "message": "btrfs-progs: tests: fix simple shellcheck warnings in test driver scripts\n\n- use quoting for variables, not avoid confusion with commands\n- use $(...) instead of `...`\n- more quoting of intermediate commands\n- save return values so it\u0027s not overwritten by \u0027if\u0027\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "83be5236415f4ffcc7579dea91c1d7d8c7662ea3",
      "tree": "e8b71b78e70e2d9df44bc477d8e916065fc80e70",
      "parents": [
        "1c886eb53c546019a12ac726e31a362d0b149149"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Jul 17 21:59:28 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Jul 17 21:59:28 2026 +0200"
      },
      "message": "btrfs-progs: tests: run dmesg with sudo\n\nOn many systems \u0027dmesg\u0027 is not available for regular users and this\nfails some of our tests. Use the sudo helper.\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "1c886eb53c546019a12ac726e31a362d0b149149",
      "tree": "92610403b06b2b33f7e8ccd7ce3dd0da30c55075",
      "parents": [
        "4ab0e80be9e3bb1db2e6038e6d4316d35fb7ba8b"
      ],
      "author": {
        "name": "Johannes Thumshirn",
        "email": "johannes.thumshirn@wdc.com",
        "time": "Thu Jul 16 13:28:19 2026 +0200"
      },
      "committer": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Thu Jul 16 21:07:42 2026 +0930"
      },
      "message": "btrfs-progs: zoned: open host-managed devices with O_DIRECT for read-only\n\nOn host-managed zoned block devices the page cache cannot be used for\nwriting to the device because it does not guarantee ordering, therefore\ndirect I/O is used to write any on-disk data structures.\n\nBut reading in btrfs-progs is still performed using buffered I/O. This\nmix of direct and buffered I/O can lead to stale page cache entries\nbeing handed off to btrfs-progs and tools like \"btrfs check\" can report\nspurious errors like:\n\n\tchecksum verify failed on \u003cbytenr\u003e wanted 0x00000000 found 0xb6bde3e4\n\neven though both copies are intact on disk.\n\nDrop the O_RDWR condition so host-managed zoned devices always use\nO_DIRECT, matching btrfstune.\n\nSigned-off-by: Johannes Thumshirn \u003cjohannes.thumshirn@wdc.com\u003e\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "4ab0e80be9e3bb1db2e6038e6d4316d35fb7ba8b",
      "tree": "ca54c8d7b57d588aabbc6cbc9dfbf4beaf52db3a",
      "parents": [
        "643c3486676f028382bc22da559e7116af7342ab"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:41:48 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:41:48 2026 +0200"
      },
      "message": "Btrfs progs v7.1\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "643c3486676f028382bc22da559e7116af7342ab",
      "tree": "59acb049e83295cfe20fbd7c89fad272ede2fed9",
      "parents": [
        "bfb3bc2db575309c38d622fbc17c9d86641c68c2"
      ],
      "author": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Fri Nov 07 10:03:34 2025 +0100"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: update CHANGES for 7.1\n\nSigned-off-by: David Sterba \u003cdsterba@suse.com\u003e\n"
    },
    {
      "commit": "bfb3bc2db575309c38d622fbc17c9d86641c68c2",
      "tree": "6cbca95b80741b30bc43b53b74828d8e5a158c77",
      "parents": [
        "af2f7a0fb5dca0fdad8ccbcd73bae0d999c2405a"
      ],
      "author": {
        "name": "Dongjiang Zhu",
        "email": "zhudongjiang@fnnas.com",
        "time": "Mon Jun 29 20:28:52 2026 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: check: add option to skip qgroup accounting verification\n\nQgroup accounting verification can be expensive because it walks extents\nand backrefs to recompute referenced/exclusive numbers.\n\nAdd --skip-qgroup-accounting so btrfs check can still load qgroup\nstatus/info/relation items from the quota tree without verifying the\naccounting numbers.\n\nReject the option with --repair and --qgroup-report, as both depend on\nfull accounting verification results.\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Dongjiang Zhu \u003czhudongjiang@fnnas.com\u003e\n"
    },
    {
      "commit": "af2f7a0fb5dca0fdad8ccbcd73bae0d999c2405a",
      "tree": "62dd56b82465f4eacd27dc5a9a46227f68230702",
      "parents": [
        "03f057dfae14c5f3375a4536b34a5237fc097e34"
      ],
      "author": {
        "name": "Dara Adib",
        "email": "daradib@ocf.berkeley.edu",
        "time": "Wed Jul 08 20:11:59 2026 -0400"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: test: add mkfs test case for hardlink deduplication\n\nAdd a test that creates 100 hard links to a 10 MB file and verifies that\nmkfs.btrfs does not grow the shrunk image.\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Dara Adib \u003cdaradib@ocf.berkeley.edu\u003e\n"
    },
    {
      "commit": "03f057dfae14c5f3375a4536b34a5237fc097e34",
      "tree": "d63ec644b250e208110658a8d95ac93d5f344db5",
      "parents": [
        "08592de6dfca15897f5a25d0c787696e1f597ba9"
      ],
      "author": {
        "name": "Dara Adib",
        "email": "daradib@ocf.berkeley.edu",
        "time": "Mon Jul 06 01:14:39 2026 -0400"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: mkfs: dedupe hardlinks when estimating rootdir size\n\nPreviously, ftw_add_entry_size() counted every hard link to a file as\nseparate data, greatly overestimating the required device size for\ndirectories with many hard links to the same inode.\n\nTrack visited inodes of non-empty regular files during the size\nestimation walk, reusing the existing hardlink_root later used during\nthe mkfs fill stage. Hardlinks still count towards metadata usage.\n\nFixes: #1141\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Dara Adib \u003cdaradib@ocf.berkeley.edu\u003e\n"
    },
    {
      "commit": "08592de6dfca15897f5a25d0c787696e1f597ba9",
      "tree": "09224b4d0cbefdbfb634b672611de6127070899a",
      "parents": [
        "9901068a6feb1c8033b94372fb769af6153331d2"
      ],
      "author": {
        "name": "Sun YangKai",
        "email": "sunk67188@gmail.com",
        "time": "Fri Jun 26 10:20:56 2026 +0800"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: extend OPEN_CTREE_PARTIAL to skip more non-essential trees\n\nExtend the existing OPEN_CTREE_PARTIAL handling so that tools like\nrestore can open damaged filesystems where non-essential trees are\ncorrupted but not needed.\n\nPreviously PARTIAL only covered a few trees. Now the following\nfailures are also non-fatal when PARTIAL is set:\n\n- load_global_roots_objectid: btrfs_search_slot failure on tree_root\n  when finding global root (extent/csum/free-space). Emits a warning\n  and creates synthetic empty roots.\n\n- block group tree (BLOCK_GROUP_TREE_OBJECTID) loading failure.\n  Emits a warning, frees block_group_root, and sets to NULL.\n  maybe_load_block_groups returns false when root is NULL, so\n  btrfs_read_block_groups is skipped and the in-memory cache stays\n  empty.\n\n- btrfs_read_block_groups non-ENOENT errors. Emits a warning and\n  continues without populating the block group cache.\n\n- dev_root (BTRFS_DEV_TREE_OBJECTID) loading failure. Emits a\n  printk (pre-existing), frees dev_root, and sets to NULL.\n\nSupporting changes:\n\n- btrfs_read_fs_root returns ERR_PTR(-ENOENT) instead of a raw\n  NULL pointer for missing dev_root (and block_group_root, which\n  was already guarded).\n- backup_super_roots guards dev_root dereference with a NULL check.\n- Remove a stale TODO comment in disk-io.h about splitting PARTIAL\n  into per-tree flags.\n- Unify all PARTIAL warning messages to the same format:\n  \"\u003cdescription\u003e, skipping (partial open)\".\n\nEssential trees (tree_root, chunk_root, fs_root) remain fatal\nunder PARTIAL as they are required by all users.\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "9901068a6feb1c8033b94372fb769af6153331d2",
      "tree": "227d6f37ace1c250e50054d52a8f25b813fe880b",
      "parents": [
        "6f9912f865b8422755aa53c22f35e7da24385a92"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Sat Jun 27 21:00:39 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: tests: add a new mkfs case for incompressible data\n\nThe new test case will verify that mkfs.btrfs --compress option will not\ncreate a uncompressed file extent but with compression set.\n\nThe idea is to create an incompressible file using /dev/urandom, then\ntry all compress algorithm, verify the contents and data checksum.\n\nFor unpatched progs, reading the file will fail.\n\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "6f9912f865b8422755aa53c22f35e7da24385a92",
      "tree": "e75c91cbea31b4ebff10ec26e345f3248e1a45c3",
      "parents": [
        "78f746f63b3b9fbf686625f40165b856ef31cf75"
      ],
      "author": {
        "name": "Qu Wenruo",
        "email": "wqu@suse.com",
        "time": "Sat Jun 27 20:43:55 2026 +0930"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: fix the incorrectly set compression\n\n[BUG]\nThe following script will lead to an incorrectly created file extent:\n\n  # mkdir rootdir\n  # xfs_io -f -c \"pwrite -i /dev/urandom 0 32k\" rootdir/foobar\n  # mkfs.btrfs -f -r rootdir --compress zstd test.img\n  # btrfs ins dump-tree -t 5 test.img\n  [...]\n\t item 6 key (257 EXTENT_DATA 0) itemoff 15810 itemsize 53\n\t\t generation 6 type 1 (regular)\n\t\t extent data disk byte 13631488 nr 32768\n\t\t extent data offset 0 nr 32768 ram 32768\n\t\t extent compression 3 (zstd)\n\nNote that file extent has the same num_bytes/ram_bytes as\ndisk_num_bytes.\n\nNormally this means an uncompressed extent, but it still has the\ncompression value set to zstd.\n\nThis will make zstd decompression to fail, and end users will be unable\nto read that file.\n\n[CAUSE]\nInside add_file_item_extent(), if the compression failed with -E2BIG, we\nset the INODE_NOCOMPRESS flag, and fallback to the uncompressed path.\n\nBut in the uncompressed path, we still check if @do_comp is set.\nAnd if it\u0027s set, we set the file extent compression value meanwhile the\nfallback path should not go through compression at all.\n\nThe file extent compression set is a left-over from the old fallback\nbehavior, before the proper try_compressed_write() refactor.\n\n[FIX]\nRemove the @do_comp check and compression value set completely.\n\nFixes: c9c8d64acd17 (\"btrfs-progs: mkfs/rootdir: factor out compressed write path from add_file_item_extent()\")\nIssue: #1135\nSigned-off-by: Qu Wenruo \u003cwqu@suse.com\u003e\n"
    },
    {
      "commit": "78f746f63b3b9fbf686625f40165b856ef31cf75",
      "tree": "ed206c3c2815f814bfb391e0ec27580f3a5d0d2a",
      "parents": [
        "9cddf3272a346260b1f2b6636581a55a311ba7b8"
      ],
      "author": {
        "name": "Daniel Vacek",
        "email": "neelx@suse.com",
        "time": "Tue Jul 07 16:27:36 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: recognize ENCRYPT inode item flag\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Daniel Vacek \u003cneelx@suse.com\u003e\n"
    },
    {
      "commit": "9cddf3272a346260b1f2b6636581a55a311ba7b8",
      "tree": "38a52e271abaad5acc04ca64d17074801c7872dd",
      "parents": [
        "2b92a1a0423a1851a13addcdd531d4887ea2d833"
      ],
      "author": {
        "name": "Sweet Tea Dorminy",
        "email": "sweettea-kernel@dorminy.me",
        "time": "Tue Jul 07 16:27:35 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: check: update inline extent length checking\n\nAs part of the encryption changes, encrypted inline file extents record\ntheir actual data length in ram_bytes, like compressed inline file\nextents, while the item\u0027s length records the actual size. As such,\nencrypted inline extents must be treated like compressed ones for\ninode length consistency checking.\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Sweet Tea Dorminy \u003csweettea-kernel@dorminy.me\u003e\nSigned-off-by: Daniel Vacek \u003cneelx@suse.com\u003e\n"
    },
    {
      "commit": "2b92a1a0423a1851a13addcdd531d4887ea2d833",
      "tree": "8cbddfd089cdbbe7800501baf040f4eaed3facf3",
      "parents": [
        "c1019bdf1d3fd0bf8e09e6d6dcb4d40167929975"
      ],
      "author": {
        "name": "Sweet Tea Dorminy",
        "email": "sweettea-kernel@dorminy.me",
        "time": "Tue Jul 07 16:27:34 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: handle fscrypt context items\n\nEncrypted inodes have a new associated item, the fscrypt context, which\ncan be printed as a pure hex string in dump-tree.\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Sweet Tea Dorminy \u003csweettea-kernel@dorminy.me\u003e\nSigned-off-by: Daniel Vacek \u003cneelx@suse.com\u003e\n"
    },
    {
      "commit": "c1019bdf1d3fd0bf8e09e6d6dcb4d40167929975",
      "tree": "36ec896e61e84d130ce54f76ce49a6be0faab8f5",
      "parents": [
        "05b461a6c65e45dc23da2d04c957c803dd5f0c38"
      ],
      "author": {
        "name": "Sweet Tea Dorminy",
        "email": "sweettea-kernel@dorminy.me",
        "time": "Tue Jul 07 16:27:33 2026 +0200"
      },
      "committer": {
        "name": "David Sterba",
        "email": "dsterba@suse.com",
        "time": "Wed Jul 15 00:28:53 2026 +0200"
      },
      "message": "btrfs-progs: print encryptin type field of file extents\n\nEncrypted file extents now have the \u0027encryption\u0027 field set to an\nencryption type.  Let\u0027s print it.\n\nReviewed-by: Qu Wenruo \u003cwqu@suse.com\u003e\nSigned-off-by: Sweet Tea Dorminy \u003csweettea-kernel@dorminy.me\u003e\nSigned-off-by: Daniel Vacek \u003cneelx@suse.com\u003e\n"
    }
  ],
  "next": "05b461a6c65e45dc23da2d04c957c803dd5f0c38"
}
