Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package xfsprogs for openSUSE:Factory 
checked in at 2026-03-19 17:36:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xfsprogs (Old)
 and      /work/SRC/openSUSE:Factory/.xfsprogs.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xfsprogs"

Thu Mar 19 17:36:08 2026 rev:95 rq:1340909 version:6.19.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/xfsprogs/xfsprogs.changes        2026-03-10 
17:47:13.000447942 +0100
+++ /work/SRC/openSUSE:Factory/.xfsprogs.new.8177/xfsprogs.changes      
2026-03-19 17:37:23.309837435 +0100
@@ -1,0 +2,22 @@
+Wed Mar 18 13:15:22 UTC 2026 - Anthony Iliopoulos <[email protected]>
+
+- update to 6.19.0
+  - xfs_io: print more realtime subvolume related information in statfs
+  - xfs_io: fix fsmap help
+  - mkfs: fix log sunit automatic configuration
+  - mkfs: fix protofile data corruption when in/out file block sizes don't 
match
+  - libxfs: fix data corruption bug in libxfs_file_write
+  - misc: fix a few memory leaks
+  - debian: Drop Uploader: Bastian Germann
+  - mkfs.xfs fix sunit size on 512e and 4kN disks.
+  - xfs_scrub_all: fix non-service-mode arguments to xfs_scrub
+  - mkfs: remove unnecessary return value affectation
+  - xfs: use blkdev_report_zones_cached()
+  - include blkzoned.h in platform_defs.h
+  - debian: don't explicitly reload systemd from postinst
+  - xfs_mdrestore: fix restoration on filesystems with 4k sectors
+  - mkfs: quiet down warning about insufficient write zones
+  - xfs_logprint: print log data to the screen in host-endian order
+  - mkfs: set rtstart from user-specified dblocks
+
+ -------------------------------------------------------------------

Old:
----
  xfsprogs-6.18.0.tar.sign
  xfsprogs-6.18.0.tar.xz

New:
----
  xfsprogs-6.19.0.tar.sign
  xfsprogs-6.19.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xfsprogs.spec ++++++
--- /var/tmp/diff_new_pack.aDYFWg/_old  2026-03-19 17:37:24.129871409 +0100
+++ /var/tmp/diff_new_pack.aDYFWg/_new  2026-03-19 17:37:24.137871740 +0100
@@ -25,7 +25,7 @@
 %endif
 %define libname libhandle1
 Name:           xfsprogs
-Version:        6.18.0
+Version:        6.19.0
 Release:        0
 Summary:        Utilities for managing the XFS file system
 License:        GPL-2.0-or-later

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.aDYFWg/_old  2026-03-19 17:37:24.169873067 +0100
+++ /var/tmp/diff_new_pack.aDYFWg/_new  2026-03-19 17:37:24.177873398 +0100
@@ -1,5 +1,5 @@
-mtime: 1773049585
-commit: 669dc3bddcde979d88af78f3455285828fbd250f6eef6c73964e40e32024a826
+mtime: 1773840713
+commit: 92ffc932c7d27194342138f11ae604eb664ba13f413cc0763c34209057269804
 url: https://src.opensuse.org/ailiopoulos/xfsprogs
 revision: factory
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-03-18 14:32:33.000000000 +0100
@@ -0,0 +1 @@
+.osc

++++++ xfsprogs-6.18.0.tar.xz -> xfsprogs-6.19.0.tar.xz ++++++
++++ 4378 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/.gitcensus new/xfsprogs-6.19.0/.gitcensus
--- old/xfsprogs-6.18.0/.gitcensus      2025-12-30 18:15:52.000000000 +0100
+++ new/xfsprogs-6.19.0/.gitcensus      2026-03-18 11:54:07.000000000 +0100
@@ -286,6 +286,8 @@
 libfrog/util.h
 libfrog/workqueue.c
 libfrog/workqueue.h
+libfrog/zones.c
+libfrog/zones.h
 libhandle/Makefile
 libhandle/handle.c
 libhandle/jdm.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/VERSION new/xfsprogs-6.19.0/VERSION
--- old/xfsprogs-6.18.0/VERSION 2025-12-24 16:33:56.000000000 +0100
+++ new/xfsprogs-6.19.0/VERSION 2026-03-18 09:49:20.000000000 +0100
@@ -2,6 +2,6 @@
 # This file is used by configure to get version information
 #
 PKG_MAJOR=6
-PKG_MINOR=18
+PKG_MINOR=19
 PKG_REVISION=0
 PKG_BUILD=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/configure.ac new/xfsprogs-6.19.0/configure.ac
--- old/xfsprogs-6.18.0/configure.ac    2025-12-24 16:34:32.000000000 +0100
+++ new/xfsprogs-6.19.0/configure.ac    2026-03-18 09:49:35.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([xfsprogs],[6.18.0],[[email protected]])
+AC_INIT([xfsprogs],[6.19.0],[[email protected]])
 AC_PREREQ([2.69])
 AC_CONFIG_AUX_DIR([.])
 AC_CONFIG_MACRO_DIR([m4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/debian/changelog new/xfsprogs-6.19.0/debian/changelog
--- old/xfsprogs-6.18.0/debian/changelog        2025-12-24 16:34:32.000000000 
+0100
+++ new/xfsprogs-6.19.0/debian/changelog        2026-03-18 09:49:35.000000000 
+0100
@@ -1,3 +1,9 @@
+xfsprogs (6.19.0-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Nathan Scott <[email protected]>  Wed, 18 Mar 2026 09:49:35 +0100
+
 xfsprogs (6.18.0-1) unstable; urgency=low
 
   * New upstream release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/debian/control new/xfsprogs-6.19.0/debian/control
--- old/xfsprogs-6.18.0/debian/control  2025-03-31 09:55:41.000000000 +0200
+++ new/xfsprogs-6.19.0/debian/control  2026-03-12 19:35:19.000000000 +0100
@@ -2,7 +2,7 @@
 Section: admin
 Priority: optional
 Maintainer: XFS Development Team <[email protected]>
-Uploaders: Nathan Scott <[email protected]>, Anibal Monsalve Salazar 
<[email protected]>, Bastian Germann <[email protected]>
+Uploaders: Nathan Scott <[email protected]>, Anibal Monsalve Salazar 
<[email protected]>
 Build-Depends: libinih-dev (>= 53), uuid-dev, debhelper (>= 12), gettext, 
libtool, libedit-dev, libblkid-dev (>= 2.17), linux-libc-dev, libdevmapper-dev, 
libicu-dev, pkg-config, liburcu-dev, systemd-dev | systemd (<< 253-2~)
 Standards-Version: 4.0.0
 Homepage: https://xfs.wiki.kernel.org/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/debian/postinst new/xfsprogs-6.19.0/debian/postinst
--- old/xfsprogs-6.18.0/debian/postinst 2025-03-31 09:55:41.000000000 +0200
+++ new/xfsprogs-6.19.0/debian/postinst 2026-03-12 19:35:19.000000000 +0100
@@ -8,9 +8,6 @@
                then
                        update-initramfs -u
                fi
-               if [ -x /bin/systemctl ]; then
-                       /bin/systemctl daemon-reload 2>&1 || true
-               fi
                ;;
 
        abort-upgrade|abort-remove|abort-deconfigure)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/doc/CHANGES new/xfsprogs-6.19.0/doc/CHANGES
--- old/xfsprogs-6.18.0/doc/CHANGES     2025-12-24 16:34:32.000000000 +0100
+++ new/xfsprogs-6.19.0/doc/CHANGES     2026-03-18 09:49:35.000000000 +0100
@@ -1,3 +1,22 @@
+xfsprogs-6.19.0 (18 Mar 2026)
+       xfs_io: print more realtime subvolume related information in statfs 
(Christoph Hellwig)
+       xfs_io: fix fsmap help (Christoph Hellwig)
+       mkfs: fix log sunit automatic configuration (Darrick J. Wong)
+       mkfs: fix protofile data corruption when in/out file block sizes don't 
match (Darrick J. Wong)
+       libxfs: fix data corruption bug in libxfs_file_write (Darrick J. Wong)
+       misc: fix a few memory leaks (Darrick J. Wong)
+       debian: Drop Uploader: Bastian Germann (Bastian Germann)
+       mkfs.xfs fix sunit size on 512e and 4kN disks. (Lukas Herbolt)
+       xfs_scrub_all: fix non-service-mode arguments to xfs_scrub (Darrick J. 
Wong)
+       mkfs: remove unnecessary return value affectation (Damien Le Moal)
+       xfs: use blkdev_report_zones_cached() (Damien Le Moal)
+       include blkzoned.h in platform_defs.h (Christoph Hellwig)
+       debian: don't explicitly reload systemd from postinst (Darrick J. Wong)
+       xfs_mdrestore: fix restoration on filesystems with 4k sectors (Darrick 
J. Wong)
+       mkfs: quiet down warning about insufficient write zones (Darrick J. 
Wong)
+       xfs_logprint: print log data to the screen in host-endian order 
(Darrick J. Wong)
+       mkfs: set rtstart from user-specified dblocks (Darrick J. Wong)
+
 xfsprogs-6.18.0 (24 Dec 2025)
        mkfs: adjust_nr_zones for zoned file system on conventional devices 
(Christoph Hellwig)
        xfs_logprint: fix pointer bug (Darrick J. Wong)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/include/libxlog.h new/xfsprogs-6.19.0/include/libxlog.h
--- old/xfsprogs-6.18.0/include/libxlog.h       2025-03-31 09:55:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/include/libxlog.h       2026-03-12 19:35:19.000000000 
+0100
@@ -99,9 +99,9 @@
 extern int     xlog_recover_do_trans(struct xlog *log, struct xlog_recover 
*trans,
                                int pass);
 extern int     xlog_header_check_recover(xfs_mount_t *mp,
-                               xlog_rec_header_t *head);
+                               struct xlog_rec_header *head);
 extern int     xlog_header_check_mount(xfs_mount_t *mp,
-                               xlog_rec_header_t *head);
+                               struct xlog_rec_header *head);
 
 #define xlog_assign_atomic_lsn(l,a,b) ((void) 0)
 #define xlog_assign_grant_head(l,a,b) ((void) 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/include/platform_defs.h 
new/xfsprogs-6.19.0/include/platform_defs.h
--- old/xfsprogs-6.18.0/include/platform_defs.h 2025-10-20 16:17:55.000000000 
+0200
+++ new/xfsprogs-6.19.0/include/platform_defs.h 2026-03-12 19:35:19.000000000 
+0100
@@ -24,6 +24,7 @@
 #include <stdbool.h>
 #include <libgen.h>
 #include <urcu.h>
+#include <linux/blkzoned.h>
 
 /* long and pointer must be either 32 bit or 64 bit */
 #define BITS_PER_LONG (sizeof(long) * CHAR_BIT)
@@ -307,4 +308,18 @@
        size_t iov_len;
 };
 
+/*
+ * Local definitions for the new cached report zones added in Linux 6.19 in 
case
+ * the system <linux/blkzoned.h> doesn't provide them yet.
+ */
+#ifndef BLKREPORTZONEV2
+#define BLKREPORTZONEV2                _IOWR(0x12, 142, struct blk_zone_report)
+#endif
+#ifndef BLK_ZONE_REP_CACHED
+#define BLK_ZONE_REP_CACHED    (1U << 31)
+#endif
+#ifndef BLK_ZONE_COND_ACTIVE
+#define BLK_ZONE_COND_ACTIVE   0xff
+#endif
+
 #endif /* __XFS_PLATFORM_DEFS_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/io/fsmap.c new/xfsprogs-6.19.0/io/fsmap.c
--- old/xfsprogs-6.18.0/io/fsmap.c      2025-06-23 13:48:41.000000000 +0200
+++ new/xfsprogs-6.19.0/io/fsmap.c      2026-03-12 19:35:19.000000000 +0100
@@ -24,7 +24,8 @@
 "\n"
 " Prints the block mapping for the filesystem hosting the current file"
 "\n"
-" fsmap prints the map of disk blocks used by the whole filesystem.\n"
+" fsmap prints the map of disk blocks used on a given filesystem.\n"
+" By default, the blocks for all devices are printed.\n"
 " When possible, owner and offset information will be included in the\n"
 " space report.\n"
 "\n"
@@ -32,7 +33,7 @@
 "     extent: major:minor [startblock..endblock]: owner startoffset..endoffset 
length\n"
 " The owner field is either an inode number or a special value.\n"
 " All the file offsets and disk blocks are in units of 512-byte blocks.\n"
-" -d -- query only the data device (default).\n"
+" -d -- query only the data device.\n"
 " -l -- query only the log device.\n"
 " -r -- query only the realtime device.\n"
 " -n -- query n extents at a time.\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/io/stat.c new/xfsprogs-6.19.0/io/stat.c
--- old/xfsprogs-6.18.0/io/stat.c       2025-10-20 16:17:55.000000000 +0200
+++ new/xfsprogs-6.19.0/io/stat.c       2026-03-12 19:35:19.000000000 +0100
@@ -282,6 +282,12 @@
                        printf(_("geom.rtextsize = %u\n"), fsgeo.rtextsize);
                        printf(_("geom.sunit = %u\n"), fsgeo.sunit);
                        printf(_("geom.swidth = %u\n"), fsgeo.swidth);
+                       printf(_("geom.rgextents = %u\n"), fsgeo.rgextents);
+                       printf(_("geom.rgcount = %u\n"), fsgeo.rgcount);
+                       printf(_("geom.rtstart = %llu\n"),
+                               (unsigned long long)fsgeo.rtstart);
+                       printf(_("geom.rtreserved = %llu\n"),
+                               (unsigned long long)fsgeo.rtreserved);
                }
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libfrog/Makefile new/xfsprogs-6.19.0/libfrog/Makefile
--- old/xfsprogs-6.18.0/libfrog/Makefile        2025-10-20 16:17:55.000000000 
+0200
+++ new/xfsprogs-6.19.0/libfrog/Makefile        2026-03-12 19:35:19.000000000 
+0100
@@ -35,7 +35,8 @@
 randbytes.c \
 scrub.c \
 util.c \
-workqueue.c
+workqueue.c \
+zones.c
 
 HFILES = \
 avl64.h \
@@ -65,7 +66,8 @@
 randbytes.h \
 scrub.h \
 statx.h \
-workqueue.h
+workqueue.h \
+zones.h
 
 GETTEXT_PY = \
        gettext.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libfrog/zones.c new/xfsprogs-6.19.0/libfrog/zones.c
--- old/xfsprogs-6.18.0/libfrog/zones.c 1970-01-01 01:00:00.000000000 +0100
+++ new/xfsprogs-6.19.0/libfrog/zones.c 2026-03-12 19:35:19.000000000 +0100
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2025, Western Digital Corporation or its affiliates.
+ */
+#include "platform_defs.h"
+#include "atomic.h"
+#include "libfrog/zones.h"
+#include <sys/ioctl.h>
+
+/* random size that allows efficient processing */
+#define ZONES_PER_REPORT               16384
+
+static atomic_t cached_reporting_disabled;
+
+struct xfrog_zone_report *
+xfrog_report_zones(
+       int                     fd,
+       uint64_t                sector,
+       struct xfrog_zone_report *rep)
+{
+       if (!rep) {
+               rep = calloc(1, struct_size(rep, zones, ZONES_PER_REPORT));
+               if (!rep) {
+                       fprintf(stderr, "%s\n",
+_("Failed to allocate memory for reporting zones."));
+                       return NULL;
+               }
+       }
+
+       /*
+        * Try cached report zones first. If this fails, fallback to the regular
+        * (slower) report zones.
+        */
+       rep->rep.sector = sector;
+       rep->rep.nr_zones = ZONES_PER_REPORT;
+
+       if (atomic_read(&cached_reporting_disabled))
+               goto uncached;
+
+       rep->rep.flags = BLK_ZONE_REP_CACHED;
+       if (ioctl(fd, BLKREPORTZONEV2, &rep->rep)) {
+               atomic_inc(&cached_reporting_disabled);
+               goto uncached;
+       }
+
+       return rep;
+
+uncached:
+       rep->rep.flags = 0;
+       if (ioctl(fd, BLKREPORTZONE, rep)) {
+               fprintf(stderr, "%s %s\n",
+_("ioctl(BLKREPORTZONE) failed:\n"),
+                       strerror(-errno));
+               free(rep);
+               return NULL;
+       }
+
+       return rep;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libfrog/zones.h new/xfsprogs-6.19.0/libfrog/zones.h
--- old/xfsprogs-6.18.0/libfrog/zones.h 1970-01-01 01:00:00.000000000 +0100
+++ new/xfsprogs-6.19.0/libfrog/zones.h 2026-03-12 19:35:19.000000000 +0100
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2025, Western Digital Corporation or its affiliates.
+ */
+#ifndef __LIBFROG_ZONES_H__
+#define __LIBFROG_ZONES_H__
+
+struct xfrog_zone_report {
+       struct blk_zone_report  rep;
+       struct blk_zone         zones[];
+};
+
+struct xfrog_zone_report *
+xfrog_report_zones(int fd, uint64_t sector, struct xfrog_zone_report *rep);
+
+#endif /* __LIBFROG_ZONES_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/rdwr.c new/xfsprogs-6.19.0/libxfs/rdwr.c
--- old/xfsprogs-6.18.0/libxfs/rdwr.c   2025-12-08 18:03:15.000000000 +0100
+++ new/xfsprogs-6.19.0/libxfs/rdwr.c   2026-03-12 19:35:19.000000000 +0100
@@ -1297,7 +1297,7 @@
        libxfs_get_block_t      *nextfunc,
        void                    *private)
 {
-       xlog_rec_header_t       *head = (xlog_rec_header_t *)caddr;
+       struct xlog_rec_header  *head = (struct xlog_rec_header *)caddr;
        char                    *p = caddr;
        __be32                  cycle_lsn;
        int                     i, len;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/util.c new/xfsprogs-6.19.0/libxfs/util.c
--- old/xfsprogs-6.18.0/libxfs/util.c   2025-12-08 18:03:15.000000000 +0100
+++ new/xfsprogs-6.19.0/libxfs/util.c   2026-03-12 19:35:19.000000000 +0100
@@ -650,7 +650,8 @@
 
 /*
  * Write a buffer to a file on the data device.  There must not be sparse holes
- * or unwritten extents.
+ * or unwritten extents, and the blocks underneath the file range will be
+ * completely overwritten.
  */
 int
 libxfs_file_write(
@@ -697,7 +698,7 @@
                if (block_off > 0)
                        memset((char *)bp->b_addr, 0, block_off);
                count = min(len, XFS_FSB_TO_B(mp, map.br_blockcount));
-               memmove(bp->b_addr, buf + block_off, count);
+               memmove(bp->b_addr + block_off, buf, count);
                bcount = BBTOB(bp->b_length);
                if (count < bcount)
                        memset((char *)bp->b_addr + block_off + count, 0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_errortag.h 
new/xfsprogs-6.19.0/libxfs/xfs_errortag.h
--- old/xfsprogs-6.18.0/libxfs/xfs_errortag.h   2025-11-24 15:24:27.000000000 
+0100
+++ new/xfsprogs-6.19.0/libxfs/xfs_errortag.h   2026-03-12 19:35:19.000000000 
+0100
@@ -73,7 +73,8 @@
 #define XFS_ERRTAG_WRITE_DELAY_MS                      43
 #define XFS_ERRTAG_EXCHMAPS_FINISH_ONE                 44
 #define XFS_ERRTAG_METAFILE_RESV_CRITICAL              45
-#define XFS_ERRTAG_MAX                                 46
+#define XFS_ERRTAG_FORCE_ZERO_RANGE                    46
+#define XFS_ERRTAG_MAX                                 47
 
 /*
  * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
@@ -133,7 +134,8 @@
 XFS_ERRTAG(WB_DELAY_MS,                wb_delay_ms,            3000) \
 XFS_ERRTAG(WRITE_DELAY_MS,     write_delay_ms,         3000) \
 XFS_ERRTAG(EXCHMAPS_FINISH_ONE,        exchmaps_finish_one,    1) \
-XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4)
+XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4) \
+XFS_ERRTAG(FORCE_ZERO_RANGE,   force_zero_range,       4)
 #endif /* XFS_ERRTAG */
 
 #endif /* __XFS_ERRORTAG_H_ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_group.h new/xfsprogs-6.19.0/libxfs/xfs_group.h
--- old/xfsprogs-6.18.0/libxfs/xfs_group.h      2025-06-23 13:48:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/libxfs/xfs_group.h      2026-03-12 19:35:19.000000000 
+0100
@@ -98,6 +98,15 @@
        return xg->xg_mount->m_groups[xg->xg_type].blocks;
 }
 
+static inline xfs_rfsblock_t
+xfs_groups_to_rfsbs(
+       struct xfs_mount        *mp,
+       uint32_t                nr_groups,
+       enum xfs_group_type     type)
+{
+       return (xfs_rfsblock_t)mp->m_groups[type].blocks * nr_groups;
+}
+
 static inline xfs_fsblock_t
 xfs_group_start_fsb(
        struct xfs_group        *xg)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_ialloc.c new/xfsprogs-6.19.0/libxfs/xfs_ialloc.c
--- old/xfsprogs-6.18.0/libxfs/xfs_ialloc.c     2025-12-08 18:03:15.000000000 
+0100
+++ new/xfsprogs-6.19.0/libxfs/xfs_ialloc.c     2026-03-12 19:35:19.000000000 
+0100
@@ -843,15 +843,16 @@
                 * invalid inode records, such as records that start at agbno 0
                 * or extend beyond the AG.
                 *
-                * Set min agbno to the first aligned, non-zero agbno and max to
-                * the last aligned agbno that is at least one full chunk from
-                * the end of the AG.
+                * Set min agbno to the first chunk aligned, non-zero agbno and
+                * max to one less than the last chunk aligned agbno from the
+                * end of the AG. We subtract 1 from max so that the cluster
+                * allocation alignment takes over and allows allocation within
+                * the last full inode chunk in the AG.
                 */
                args.min_agbno = args.mp->m_sb.sb_inoalignmt;
                args.max_agbno = round_down(xfs_ag_block_count(args.mp,
                                                        pag_agno(pag)),
-                                           args.mp->m_sb.sb_inoalignmt) -
-                                igeo->ialloc_blks;
+                                           args.mp->m_sb.sb_inoalignmt) - 1;
 
                error = xfs_alloc_vextent_near_bno(&args,
                                xfs_agbno_to_fsb(pag,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_log_format.h 
new/xfsprogs-6.19.0/libxfs/xfs_log_format.h
--- old/xfsprogs-6.18.0/libxfs/xfs_log_format.h 2025-12-08 18:03:15.000000000 
+0100
+++ new/xfsprogs-6.19.0/libxfs/xfs_log_format.h 2026-03-12 19:35:19.000000000 
+0100
@@ -31,6 +31,7 @@
 #define XLOG_BIG_RECORD_BSIZE  (32*1024)       /* 32k buffers */
 #define XLOG_MAX_RECORD_BSIZE  (256*1024)
 #define XLOG_HEADER_CYCLE_SIZE (32*1024)       /* cycle data in header */
+#define XLOG_CYCLE_DATA_SIZE   (XLOG_HEADER_CYCLE_SIZE / BBSIZE)
 #define XLOG_MIN_RECORD_BSHIFT 14              /* 16384 == 1 << 14 */
 #define XLOG_BIG_RECORD_BSHIFT 15              /* 32k == 1 << 15 */
 #define XLOG_MAX_RECORD_BSHIFT 18              /* 256k == 1 << 18 */
@@ -125,7 +126,17 @@
 #define XLOG_FMT XLOG_FMT_LINUX_LE
 #endif
 
-typedef struct xlog_rec_header {
+struct xlog_rec_ext_header {
+       __be32          xh_cycle;       /* write cycle of log */
+       __be32          xh_cycle_data[XLOG_CYCLE_DATA_SIZE];
+       __u8            xh_reserved[252];
+};
+
+/* actual ext header payload size for checksumming */
+#define XLOG_REC_EXT_SIZE \
+       offsetofend(struct xlog_rec_ext_header, xh_cycle_data)
+
+struct xlog_rec_header {
        __be32    h_magicno;    /* log record (LR) identifier           :  4 */
        __be32    h_cycle;      /* write cycle of log                   :  4 */
        __be32    h_version;    /* LR version                           :  4 */
@@ -135,7 +146,7 @@
        __le32    h_crc;        /* crc of log record                    :  4 */
        __be32    h_prev_block; /* block number to previous LR          :  4 */
        __be32    h_num_logops; /* number of log operations in this LR  :  4 */
-       __be32    h_cycle_data[XLOG_HEADER_CYCLE_SIZE / BBSIZE];
+       __be32    h_cycle_data[XLOG_CYCLE_DATA_SIZE];
 
        /* fields added by the Linux port: */
        __be32    h_fmt;        /* format of log record                 :  4 */
@@ -160,30 +171,19 @@
         * (little-endian) architectures.
         */
        __u32     h_pad0;
-} xlog_rec_header_t;
+
+       __u8      h_reserved[184];
+       struct xlog_rec_ext_header h_ext[];
+};
 
 #ifdef __i386__
 #define XLOG_REC_SIZE          offsetofend(struct xlog_rec_header, h_size)
-#define XLOG_REC_SIZE_OTHER    sizeof(struct xlog_rec_header)
+#define XLOG_REC_SIZE_OTHER    offsetofend(struct xlog_rec_header, h_pad0)
 #else
-#define XLOG_REC_SIZE          sizeof(struct xlog_rec_header)
+#define XLOG_REC_SIZE          offsetofend(struct xlog_rec_header, h_pad0)
 #define XLOG_REC_SIZE_OTHER    offsetofend(struct xlog_rec_header, h_size)
 #endif /* __i386__ */
 
-typedef struct xlog_rec_ext_header {
-       __be32    xh_cycle;     /* write cycle of log                   : 4 */
-       __be32    xh_cycle_data[XLOG_HEADER_CYCLE_SIZE / BBSIZE]; /*    : 256 */
-} xlog_rec_ext_header_t;
-
-/*
- * Quite misnamed, because this union lays out the actual on-disk log buffer.
- */
-typedef union xlog_in_core2 {
-       xlog_rec_header_t       hic_header;
-       xlog_rec_ext_header_t   hic_xheader;
-       char                    hic_sector[XLOG_HEADER_SIZE];
-} xlog_in_core_2_t;
-
 /* not an on-disk structure, but needed by log recovery in userspace */
 struct xfs_log_iovec {
        void            *i_addr;        /* beginning address of region */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_ondisk.h new/xfsprogs-6.19.0/libxfs/xfs_ondisk.h
--- old/xfsprogs-6.18.0/libxfs/xfs_ondisk.h     2025-12-08 18:03:15.000000000 
+0100
+++ new/xfsprogs-6.19.0/libxfs/xfs_ondisk.h     2026-03-12 19:35:19.000000000 
+0100
@@ -174,9 +174,11 @@
        XFS_CHECK_STRUCT_SIZE(struct xfs_rud_log_format,        16);
        XFS_CHECK_STRUCT_SIZE(struct xfs_map_extent,            32);
        XFS_CHECK_STRUCT_SIZE(struct xfs_phys_extent,           16);
-       XFS_CHECK_STRUCT_SIZE(struct xlog_rec_header,           328);
-       XFS_CHECK_STRUCT_SIZE(struct xlog_rec_ext_header,       260);
+       XFS_CHECK_STRUCT_SIZE(struct xlog_rec_header,           512);
+       XFS_CHECK_STRUCT_SIZE(struct xlog_rec_ext_header,       512);
 
+       XFS_CHECK_OFFSET(struct xlog_rec_header, h_reserved,            328);
+       XFS_CHECK_OFFSET(struct xlog_rec_ext_header, xh_reserved,       260);
        XFS_CHECK_OFFSET(struct xfs_bui_log_format, bui_extents,        16);
        XFS_CHECK_OFFSET(struct xfs_cui_log_format, cui_extents,        16);
        XFS_CHECK_OFFSET(struct xfs_rui_log_format, rui_extents,        16);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_quota_defs.h 
new/xfsprogs-6.19.0/libxfs/xfs_quota_defs.h
--- old/xfsprogs-6.18.0/libxfs/xfs_quota_defs.h 2025-03-31 09:55:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/libxfs/xfs_quota_defs.h 2026-03-12 19:35:19.000000000 
+0100
@@ -29,11 +29,9 @@
  * flags for q_flags field in the dquot.
  */
 #define XFS_DQFLAG_DIRTY       (1u << 0)       /* dquot is dirty */
-#define XFS_DQFLAG_FREEING     (1u << 1)       /* dquot is being torn down */
 
 #define XFS_DQFLAG_STRINGS \
-       { XFS_DQFLAG_DIRTY,     "DIRTY" }, \
-       { XFS_DQFLAG_FREEING,   "FREEING" }
+       { XFS_DQFLAG_DIRTY,     "DIRTY" }
 
 /*
  * We have the possibility of all three quota types being active at once, and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_rtgroup.c 
new/xfsprogs-6.19.0/libxfs/xfs_rtgroup.c
--- old/xfsprogs-6.18.0/libxfs/xfs_rtgroup.c    2025-06-23 13:48:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/libxfs/xfs_rtgroup.c    2026-03-12 19:35:19.000000000 
+0100
@@ -45,6 +45,31 @@
        return 0;
 }
 
+/* Compute the number of rt extents in this realtime group. */
+static xfs_rtxnum_t
+__xfs_rtgroup_extents(
+       struct xfs_mount        *mp,
+       xfs_rgnumber_t          rgno,
+       xfs_rgnumber_t          rgcount,
+       xfs_rtbxlen_t           rextents)
+{
+       ASSERT(rgno < rgcount);
+       if (rgno == rgcount - 1)
+               return rextents - ((xfs_rtxnum_t)rgno * mp->m_sb.sb_rgextents);
+
+       ASSERT(xfs_has_rtgroups(mp));
+       return mp->m_sb.sb_rgextents;
+}
+
+xfs_rtxnum_t
+xfs_rtgroup_extents(
+       struct xfs_mount        *mp,
+       xfs_rgnumber_t          rgno)
+{
+       return __xfs_rtgroup_extents(mp, rgno, mp->m_sb.sb_rgcount,
+                       mp->m_sb.sb_rextents);
+}
+
 /* Precompute this group's geometry */
 void
 xfs_rtgroup_calc_geometry(
@@ -55,7 +80,8 @@
        xfs_rtbxlen_t           rextents)
 {
        rtg->rtg_extents = __xfs_rtgroup_extents(mp, rgno, rgcount, rextents);
-       rtg_group(rtg)->xg_block_count = rtg->rtg_extents * 
mp->m_sb.sb_rextsize;
+       rtg_group(rtg)->xg_block_count =
+               rtg->rtg_extents * mp->m_sb.sb_rextsize;
        rtg_group(rtg)->xg_min_gbno = xfs_rtgroup_min_block(mp, rgno);
 }
 
@@ -133,31 +159,6 @@
        return error;
 }
 
-/* Compute the number of rt extents in this realtime group. */
-xfs_rtxnum_t
-__xfs_rtgroup_extents(
-       struct xfs_mount        *mp,
-       xfs_rgnumber_t          rgno,
-       xfs_rgnumber_t          rgcount,
-       xfs_rtbxlen_t           rextents)
-{
-       ASSERT(rgno < rgcount);
-       if (rgno == rgcount - 1)
-               return rextents - ((xfs_rtxnum_t)rgno * mp->m_sb.sb_rgextents);
-
-       ASSERT(xfs_has_rtgroups(mp));
-       return mp->m_sb.sb_rgextents;
-}
-
-xfs_rtxnum_t
-xfs_rtgroup_extents(
-       struct xfs_mount        *mp,
-       xfs_rgnumber_t          rgno)
-{
-       return __xfs_rtgroup_extents(mp, rgno, mp->m_sb.sb_rgcount,
-                       mp->m_sb.sb_rextents);
-}
-
 /*
  * Update the rt extent count of the previous tail rtgroup if it changed during
  * recovery (i.e. recovery of a growfs).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_rtgroup.h 
new/xfsprogs-6.19.0/libxfs/xfs_rtgroup.h
--- old/xfsprogs-6.18.0/libxfs/xfs_rtgroup.h    2025-12-08 18:03:15.000000000 
+0100
+++ new/xfsprogs-6.19.0/libxfs/xfs_rtgroup.h    2026-03-12 19:35:19.000000000 
+0100
@@ -64,12 +64,6 @@
  */
 #define XFS_RTG_FREE                   XA_MARK_0
 
-/*
- * For zoned RT devices this is set on groups that are fully written and that
- * have unused blocks.  Used by the garbage collection to pick targets.
- */
-#define XFS_RTG_RECLAIMABLE            XA_MARK_1
-
 static inline struct xfs_rtgroup *to_rtg(struct xfs_group *xg)
 {
        return container_of(xg, struct xfs_rtgroup, rtg_group);
@@ -291,8 +285,6 @@
 int xfs_initialize_rtgroups(struct xfs_mount *mp, xfs_rgnumber_t first_rgno,
                xfs_rgnumber_t end_rgno, xfs_rtbxlen_t rextents);
 
-xfs_rtxnum_t __xfs_rtgroup_extents(struct xfs_mount *mp, xfs_rgnumber_t rgno,
-               xfs_rgnumber_t rgcount, xfs_rtbxlen_t rextents);
 xfs_rtxnum_t xfs_rtgroup_extents(struct xfs_mount *mp, xfs_rgnumber_t rgno);
 void xfs_rtgroup_calc_geometry(struct xfs_mount *mp, struct xfs_rtgroup *rtg,
                xfs_rgnumber_t rgno, xfs_rgnumber_t rgcount,
@@ -371,4 +363,12 @@
 # define xfs_rtgroup_get_geometry(rtg, rgeo)   (-EOPNOTSUPP)
 #endif /* CONFIG_XFS_RT */
 
+static inline xfs_rfsblock_t
+xfs_rtgs_to_rfsbs(
+       struct xfs_mount        *mp,
+       uint32_t                nr_groups)
+{
+       return xfs_groups_to_rfsbs(mp, nr_groups, XG_TYPE_RTG);
+}
+
 #endif /* __LIBXFS_RTGROUP_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_sb.c new/xfsprogs-6.19.0/libxfs/xfs_sb.c
--- old/xfsprogs-6.18.0/libxfs/xfs_sb.c 2025-12-08 18:03:15.000000000 +0100
+++ new/xfsprogs-6.19.0/libxfs/xfs_sb.c 2026-03-12 19:35:19.000000000 +0100
@@ -299,6 +299,21 @@
            sbp->sb_rbmblocks != xfs_expected_rbmblocks(sbp))
                return false;
 
+       if (xfs_sb_is_v5(sbp) &&
+           (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_ZONED)) {
+               uint32_t                mod;
+
+               /*
+                * Zoned RT devices must be aligned to the RT group size,
+                * because garbage collection assumes that all zones have the
+                * same size to avoid insane complexity if that weren't the
+                * case.
+                */
+               div_u64_rem(sbp->sb_rextents, sbp->sb_rgextents, &mod);
+               if (mod)
+                       return false;
+       }
+
        return true;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxfs/xfs_zones.c new/xfsprogs-6.19.0/libxfs/xfs_zones.c
--- old/xfsprogs-6.18.0/libxfs/xfs_zones.c      2025-06-23 13:48:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/libxfs/xfs_zones.c      2026-03-12 19:35:19.000000000 
+0100
@@ -3,7 +3,6 @@
  * Copyright (c) 2023-2025 Christoph Hellwig.
  * Copyright (c) 2024-2025, Western Digital Corporation or its affiliates.
  */
-#include <linux/blkzoned.h>
 #include "libxfs_priv.h"
 #include "xfs.h"
 #include "xfs_fs.h"
@@ -97,6 +96,7 @@
        case BLK_ZONE_COND_IMP_OPEN:
        case BLK_ZONE_COND_EXP_OPEN:
        case BLK_ZONE_COND_CLOSED:
+       case BLK_ZONE_COND_ACTIVE:
                return xfs_zone_validate_wp(zone, rtg, write_pointer);
        case BLK_ZONE_COND_FULL:
                return xfs_zone_validate_full(zone, rtg, write_pointer);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxlog/util.c new/xfsprogs-6.19.0/libxlog/util.c
--- old/xfsprogs-6.18.0/libxlog/util.c  2025-03-31 09:55:41.000000000 +0200
+++ new/xfsprogs-6.19.0/libxlog/util.c  2026-03-12 19:35:19.000000000 +0100
@@ -67,7 +67,7 @@
 }
 
 static int
-header_check_uuid(xfs_mount_t *mp, xlog_rec_header_t *head)
+header_check_uuid(xfs_mount_t *mp, struct xlog_rec_header *head)
 {
     char uu_log[64], uu_sb[64];
 
@@ -89,7 +89,7 @@
 }
 
 int
-xlog_header_check_recover(xfs_mount_t *mp, xlog_rec_header_t *head)
+xlog_header_check_recover(xfs_mount_t *mp, struct xlog_rec_header *head)
 {
     if (print_record_header)
        printf(_("\nLOG REC AT LSN cycle %d block %d (0x%x, 0x%x)\n"),
@@ -125,7 +125,7 @@
 }
 
 int
-xlog_header_check_mount(xfs_mount_t *mp, xlog_rec_header_t *head)
+xlog_header_check_mount(xfs_mount_t *mp, struct xlog_rec_header *head)
 {
     if (platform_uuid_is_null(&head->h_fs_uuid)) return 0;
     if (header_check_uuid(mp, head)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/libxlog/xfs_log_recover.c 
new/xfsprogs-6.19.0/libxlog/xfs_log_recover.c
--- old/xfsprogs-6.18.0/libxlog/xfs_log_recover.c       2025-12-08 
18:03:15.000000000 +0100
+++ new/xfsprogs-6.19.0/libxlog/xfs_log_recover.c       2026-03-12 
19:35:19.000000000 +0100
@@ -296,7 +296,7 @@
        xfs_daddr_t             i;
        struct xfs_buf          *bp;
        char                    *offset = NULL;
-       xlog_rec_header_t       *head = NULL;
+       struct xlog_rec_header  *head = NULL;
        int                     error = 0;
        int                     smallmem = 0;
        int                     num_blks = *last_blk - start_blk;
@@ -331,7 +331,7 @@
                                goto out;
                }
 
-               head = (xlog_rec_header_t *)offset;
+               head = (struct xlog_rec_header *)offset;
 
                if (head->h_magicno == cpu_to_be32(XLOG_HEADER_MAGIC_NUM))
                        break;
@@ -673,7 +673,7 @@
        xfs_daddr_t             *head_blk,
        xfs_daddr_t             *tail_blk)
 {
-       xlog_rec_header_t       *rhead;
+       struct xlog_rec_header  *rhead;
        struct xlog_op_header   *op_head;
        char                    *offset = NULL;
        struct xfs_buf          *bp;
@@ -747,7 +747,7 @@
        }
 
        /* find blk_no of tail of log */
-       rhead = (xlog_rec_header_t *)offset;
+       rhead = (struct xlog_rec_header *)offset;
        *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn));
 
        /*
@@ -1324,35 +1324,41 @@
        return 0;
 }
 
+/*
+ * Cycles over XLOG_CYCLE_DATA_SIZE overflow into the extended header that was
+ * added for v2 logs.  Addressing for the cycles array there is off by one,
+ * because the first batch of cycles is in the original header.
+ */
+static inline __be32 *xlog_cycle_data(struct xlog_rec_header *rhead, unsigned 
i)
+{
+       if (i >= XLOG_CYCLE_DATA_SIZE) {
+               unsigned        j = i / XLOG_CYCLE_DATA_SIZE;
+               unsigned        k = i % XLOG_CYCLE_DATA_SIZE;
+
+               return &rhead->h_ext[j - 1].xh_cycle_data[k];
+       }
+
+       return &rhead->h_cycle_data[i];
+}
+
 STATIC int
 xlog_unpack_data(
        struct xlog_rec_header  *rhead,
        char                    *dp,
        struct xlog             *log)
 {
-       int                     i, j, k;
+       int                     i;
        int                     error;
 
        error = xlog_unpack_data_crc(rhead, dp, log);
        if (error)
                return error;
 
-       for (i = 0; i < BTOBB(be32_to_cpu(rhead->h_len)) &&
-                 i < (XLOG_HEADER_CYCLE_SIZE / BBSIZE); i++) {
-               *(__be32 *)dp = *(__be32 *)&rhead->h_cycle_data[i];
+       for (i = 0; i < BTOBB(be32_to_cpu(rhead->h_len)); i++) {
+               *(__be32 *)dp = *xlog_cycle_data(rhead, i);
                dp += BBSIZE;
        }
 
-       if (xfs_has_logv2(log->l_mp)) {
-               xlog_in_core_2_t *xhdr = (xlog_in_core_2_t *)rhead;
-               for ( ; i < BTOBB(be32_to_cpu(rhead->h_len)); i++) {
-                       j = i / (XLOG_HEADER_CYCLE_SIZE / BBSIZE);
-                       k = i % (XLOG_HEADER_CYCLE_SIZE / BBSIZE);
-                       *(__be32 *)dp = xhdr[j].hic_xheader.xh_cycle_data[k];
-                       dp += BBSIZE;
-               }
-       }
-
        return 0;
 }
 
@@ -1407,7 +1413,7 @@
        xfs_daddr_t             tail_blk,
        int                     pass)
 {
-       xlog_rec_header_t       *rhead;
+       struct xlog_rec_header  *rhead;
        xfs_daddr_t             blk_no;
        char                    *offset;
        struct xfs_buf          *hbp, *dbp;
@@ -1436,7 +1442,7 @@
                if (error)
                        goto bread_err1;
 
-               rhead = (xlog_rec_header_t *)offset;
+               rhead = (struct xlog_rec_header *)offset;
                error = xlog_valid_rec_header(log, rhead, tail_blk);
                if (error)
                        goto bread_err1;
@@ -1473,7 +1479,7 @@
                        if (error)
                                goto bread_err2;
 
-                       rhead = (xlog_rec_header_t *)offset;
+                       rhead = (struct xlog_rec_header *)offset;
                        error = xlog_valid_rec_header(log, rhead, blk_no);
                        if (error)
                                goto bread_err2;
@@ -1548,7 +1554,7 @@
                                if (error)
                                        goto bread_err2;
                        }
-                       rhead = (xlog_rec_header_t *)offset;
+                       rhead = (struct xlog_rec_header *)offset;
                        error = xlog_valid_rec_header(log, rhead,
                                                split_hblks ? blk_no : 0);
                        if (error)
@@ -1622,7 +1628,7 @@
                        if (error)
                                goto bread_err2;
 
-                       rhead = (xlog_rec_header_t *)offset;
+                       rhead = (struct xlog_rec_header *)offset;
                        error = xlog_valid_rec_header(log, rhead, blk_no);
                        if (error)
                                goto bread_err2;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/logprint/log_dump.c new/xfsprogs-6.19.0/logprint/log_dump.c
--- old/xfsprogs-6.18.0/logprint/log_dump.c     2025-03-31 09:55:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/logprint/log_dump.c     2026-03-12 19:35:19.000000000 
+0100
@@ -21,11 +21,11 @@
        int                     r;
        uint                    last_cycle = -1;
        xfs_daddr_t             blkno, dupblkno;
-       xlog_rec_header_t       *hdr;
+       struct xlog_rec_header  *hdr;
        char                    buf[XLOG_HEADER_SIZE];
 
        dupblkno = 0;
-       hdr = (xlog_rec_header_t *)buf;
+       hdr = (struct xlog_rec_header *)buf;
        xlog_print_lseek(log, fd, 0, SEEK_SET);
        for (blkno = 0; blkno < log->l_logBBsize; blkno++) {
                r = read(fd, buf, sizeof(buf));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/logprint/log_print_all.c 
new/xfsprogs-6.19.0/logprint/log_print_all.c
--- old/xfsprogs-6.18.0/logprint/log_print_all.c        2025-12-08 
18:03:15.000000000 +0100
+++ new/xfsprogs-6.19.0/logprint/log_print_all.c        2026-03-12 
19:35:19.000000000 +0100
@@ -55,8 +55,9 @@
 
                while (j < nums) {
                        if ((j % 8) == 0)
-                               printf("%2x ", j);
-                       printf("%8x ", *dp);
+                               printf("%2x: ", j);
+                       printf("%08x ", print_host_endian ? be32_to_cpu(*dp) :
+                                                           *dp);
                        dp++;
                        j++;
                        if ((j % 8) == 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/logprint/logprint.c new/xfsprogs-6.19.0/logprint/logprint.c
--- old/xfsprogs-6.18.0/logprint/logprint.c     2025-03-31 09:55:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/logprint/logprint.c     2026-03-12 19:35:19.000000000 
+0100
@@ -24,6 +24,7 @@
 int    print_overwrite;
 int     print_no_data;
 int     print_no_print;
+int    print_host_endian;
 static int     print_operation = OP_PRINT;
 static struct libxfs_init x;
 
@@ -37,6 +38,7 @@
     -d             dump the log in log-record format\n\
     -e             exit when an error is found in the log\n\
     -f             specified device is actually a file\n\
+    -h             print hex data in host-endian order\n\
     -l <device>     filename of external log\n\
     -n             don't try and interpret log data\n\
     -o             print buffer data in hex\n\
@@ -171,6 +173,9 @@
                                x.log.name = optarg;
                                x.log.isfile = 1;
                                break;
+                       case 'h':
+                               print_host_endian = 1;
+                               break;
                        case 'i':
                                print_inode++;
                                break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/logprint/logprint.h new/xfsprogs-6.19.0/logprint/logprint.h
--- old/xfsprogs-6.18.0/logprint/logprint.h     2025-12-08 18:03:15.000000000 
+0100
+++ new/xfsprogs-6.19.0/logprint/logprint.h     2026-03-12 19:35:19.000000000 
+0100
@@ -16,6 +16,7 @@
 extern int     print_overwrite;
 extern int     print_no_data;
 extern int     print_no_print;
+extern int     print_host_endian;
 
 /* exports */
 extern time64_t xlog_extract_dinode_ts(const xfs_log_timestamp_t);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/man/man8/xfs_logprint.8 
new/xfsprogs-6.19.0/man/man8/xfs_logprint.8
--- old/xfsprogs-6.18.0/man/man8/xfs_logprint.8 2025-03-31 09:55:41.000000000 
+0200
+++ new/xfsprogs-6.19.0/man/man8/xfs_logprint.8 2026-03-12 19:35:19.000000000 
+0100
@@ -76,6 +76,10 @@
 an ordinary file with
 .BR xfs_copy (8).
 .TP
+.B \-h
+Print u32 hex dump data in host-endian order.
+The default is to print without any endian decoding.
+.TP
 .BI \-l " logdev"
 External log device. Only for those filesystems which use an external log.
 .TP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/mdrestore/xfs_mdrestore.c 
new/xfsprogs-6.19.0/mdrestore/xfs_mdrestore.c
--- old/xfsprogs-6.18.0/mdrestore/xfs_mdrestore.c       2025-12-12 
14:49:32.000000000 +0100
+++ new/xfsprogs-6.19.0/mdrestore/xfs_mdrestore.c       2026-03-12 
19:35:19.000000000 +0100
@@ -8,7 +8,6 @@
 #include "xfs_metadump.h"
 #include <libfrog/platform.h>
 #include "libfrog/div64.h"
-#include <linux/blkzoned.h>
 
 union mdrestore_headers {
        __be32                          magic;
@@ -437,13 +436,21 @@
        if (fread(&xme, sizeof(xme), 1, md_fp) != 1)
                fatal("error reading from metadump file\n");
 
-       if (xme.xme_addr != 0 || be32_to_cpu(xme.xme_len) != 1 ||
-           (be64_to_cpu(xme.xme_addr) & XME_ADDR_DEVICE_MASK) !=
-                       XME_ADDR_DATA_DEVICE)
-               fatal("Invalid superblock disk address/length\n");
+       /*
+        * The first block must be the primary super, which is at the start of
+        * the data device, which is device 0.
+        */
+       if (xme.xme_addr != 0)
+               fatal("Invalid superblock disk address 0x%llx\n",
+                               be64_to_cpu(xme.xme_addr));
 
        len = BBTOB(be32_to_cpu(xme.xme_len));
 
+       /* The primary superblock is always a single filesystem sector. */
+       if (len < BBTOB(1) || len > XFS_MAX_SECTORSIZE)
+               fatal("Invalid superblock disk length 0x%x\n",
+                               be32_to_cpu(xme.xme_len));
+
        if (fread(block_buffer, len, 1, md_fp) != 1)
                fatal("error reading from metadump file\n");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/mkfs/proto.c new/xfsprogs-6.19.0/mkfs/proto.c
--- old/xfsprogs-6.18.0/mkfs/proto.c    2025-11-05 17:45:30.000000000 +0100
+++ new/xfsprogs-6.19.0/mkfs/proto.c    2026-03-12 19:35:19.000000000 +0100
@@ -374,6 +374,17 @@
                        break;
                }
 
+               /*
+                * If we pass an unaligned range to libxfs_file_write, it will
+                * zero the unaligned head and tail parts of each block.  If
+                * the fd filesystem has a smaller blocksize, then we can end
+                * up writing to the same block twice, causing unwanted zeroing
+                * and hence data corruption.
+                */
+               data_pos = rounddown_64(data_pos, mp->m_sb.sb_blocksize);
+               hole_pos = min(roundup_64(hole_pos, mp->m_sb.sb_blocksize),
+                              statbuf.st_size);
+
                writefile_range(ip, fname, fd, data_pos, hole_pos - data_pos);
                data_pos = lseek(fd, hole_pos, SEEK_DATA);
        }
@@ -1412,19 +1423,19 @@
        struct xfs_trans        *tp;
        struct xfs_parent_args  *ppargs = NULL;
 
-       tp = getres(mp, 0);
-       ppargs = newpptr(mp);
-       dst_ino = get_hardlink_dst_inode(file_stat.st_ino);
-
        /*
         * We didn't find the hardlink inode, this means it's the first time
         * we see it, report error so create_nondir_inode() can continue 
handling the
         * inode as a regular file type, and later save the source inode in our
         * buffer for future consumption.
         */
+       dst_ino = get_hardlink_dst_inode(file_stat.st_ino);
        if (dst_ino == 0)
                return false;
 
+       tp = getres(mp, 0);
+       ppargs = newpptr(mp);
+
        error = -libxfs_iget(mp, NULL, dst_ino, 0, &ip);
        if (error)
                fail(_("failed to get inode"), error);
@@ -1546,12 +1557,7 @@
                close(fd);
                return;
        }
-       /*
-        * If instead we have an error it means the hardlink was not registered,
-        * so we proceed to treat it like a regular file, and save it to our
-        * tracker later.
-        */
-       tp = getres(mp, 0);
+
        /*
         * In case of symlinks, we need to handle things a little differently.
         * We need to read out our link target and act accordingly.
@@ -1563,6 +1569,8 @@
                if (link_len >= PATH_MAX)
                        fail(_("symlink target too long"), ENAMETOOLONG);
                tp = getres(mp, XFS_B_TO_FSB(mp, link_len));
+       } else {
+               tp = getres(mp, 0);
        }
        ppargs = newpptr(mp);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/mkfs/xfs_mkfs.c new/xfsprogs-6.19.0/mkfs/xfs_mkfs.c
--- old/xfsprogs-6.18.0/mkfs/xfs_mkfs.c 2025-12-19 15:01:29.000000000 +0100
+++ new/xfsprogs-6.19.0/mkfs/xfs_mkfs.c 2026-03-12 19:35:19.000000000 +0100
@@ -6,7 +6,6 @@
 #include "libfrog/util.h"
 #include "libxfs.h"
 #include <ctype.h>
-#include <linux/blkzoned.h>
 #include "libxfs/xfs_zones.h"
 #include "xfs_multidisk.h"
 #include "libxcmd.h"
@@ -15,6 +14,7 @@
 #include "libfrog/crc32cselftest.h"
 #include "libfrog/dahashselftest.h"
 #include "libfrog/fsproperties.h"
+#include "libfrog/zones.h"
 #include "proto.h"
 #include <ini.h>
 
@@ -2542,9 +2542,6 @@
        struct zone_info        log;
 };
 
-/* random size that allows efficient processing */
-#define ZONES_PER_IOCTL                        16384
-
 static void
 zone_validate_capacity(
        struct zone_info        *zi,
@@ -2572,12 +2569,11 @@
        const char              *name,
        struct zone_info        *zi)
 {
-       struct blk_zone_report  *rep;
+       struct xfrog_zone_report *rep = NULL;
        bool                    found_seq = false;
-       int                     fd, ret = 0;
+       int                     fd;
        uint64_t                device_size;
        uint64_t                sector = 0;
-       size_t                  rep_size;
        unsigned int            i, n = 0;
        struct stat             st;
 
@@ -2587,10 +2583,8 @@
                exit(1);
        }
 
-       if (fstat(fd, &st) < 0) {
-               ret = -EIO;
+       if (fstat(fd, &st) < 0)
                goto out_close;
-       }
        if (!S_ISBLK(st.st_mode))
                goto out_close;
 
@@ -2606,32 +2600,18 @@
        zi->nr_zones = device_size / zi->zone_size;
        zi->nr_conv_zones = 0;
 
-       rep_size = sizeof(struct blk_zone_report) +
-                  sizeof(struct blk_zone) * ZONES_PER_IOCTL;
-       rep = malloc(rep_size);
-       if (!rep) {
-               fprintf(stderr,
-_("Failed to allocate memory for zone reporting.\n"));
-               exit(1);
-       }
-
        while (n < zi->nr_zones) {
-               struct blk_zone *zones = (struct blk_zone *)(rep + 1);
-
-               memset(rep, 0, rep_size);
-               rep->sector = sector;
-               rep->nr_zones = ZONES_PER_IOCTL;
+               struct blk_zone *zones;
 
-               ret = ioctl(fd, BLKREPORTZONE, rep);
-               if (ret) {
-                       fprintf(stderr,
-_("ioctl(BLKREPORTZONE) failed: %d!\n"), -errno);
+               rep = xfrog_report_zones(fd, sector, rep);
+               if (!rep)
                        exit(1);
-               }
-               if (!rep->nr_zones)
+
+               if (!rep->rep.nr_zones)
                        break;
 
-               for (i = 0; i < rep->nr_zones; i++) {
+               zones = rep->zones;
+               for (i = 0; i < rep->rep.nr_zones; i++) {
                        if (n >= zi->nr_zones)
                                break;
 
@@ -2678,8 +2658,8 @@
 
                        n++;
                }
-               sector = zones[rep->nr_zones - 1].start +
-                        zones[rep->nr_zones - 1].len;
+               sector = zones[rep->rep.nr_zones - 1].start +
+                        zones[rep->rep.nr_zones - 1].len;
        }
 
        free(rep);
@@ -3644,8 +3624,6 @@
                lsunit = cli->lsunit;
        else if (cli_opt_set(&lopts, L_SU))
                lsu = getnum(cli->lsu, &lopts, L_SU);
-       else if (cfg->lsectorsize > XLOG_HEADER_SIZE)
-               lsu = cfg->blocksize; /* lsunit matches filesystem block size */
 
        if (lsu) {
                /* verify if lsu is a multiple block size */
@@ -3671,14 +3649,22 @@
        if (lsunit) {
                /* convert from 512 byte blocks to fs blocks */
                cfg->lsunit = DTOBT(lsunit, cfg->blocklog);
-       } else if (cfg->sb_feat.log_version == 2 &&
-                  cfg->loginternal && cfg->dsunit) {
-               /* lsunit and dsunit now in fs blocks */
-               cfg->lsunit = cfg->dsunit;
-       } else if (cfg->sb_feat.log_version == 2 &&
-                  !cfg->loginternal) {
-               /* use the external log device properties */
-               cfg->lsunit = DTOBT(ft->log.sunit, cfg->blocklog);
+       } else if (cfg->sb_feat.log_version == 2 && cfg->loginternal) {
+               if (cfg->dsunit) {
+                       /* lsunit and dsunit now in fs blocks */
+                       cfg->lsunit = cfg->dsunit;
+               } else if (cfg->lsectorsize > XLOG_HEADER_SIZE) {
+                       /* lsunit matches filesystem block size */
+                       cfg->lsunit = 1;
+               }
+       } else if (cfg->sb_feat.log_version == 2 && !cfg->loginternal) {
+               if (ft->log.sunit > 0) {
+                       /* use the external log device properties */
+                       cfg->lsunit = DTOBT(ft->log.sunit, cfg->blocklog);
+               } else if (cfg->lsectorsize > XLOG_HEADER_SIZE) {
+                       /* lsunit matches filesystem block size */
+                       cfg->lsunit = 1;
+               }
        }
 
        if (cfg->sb_feat.log_version == 2 &&
@@ -3696,6 +3682,36 @@
 
 }
 
+static uint64_t
+calc_rtstart(
+       const struct mkfs_params        *cfg,
+       const struct libxfs_init        *xi)
+{
+       uint64_t                        rt_target_size;
+       uint64_t                        rtstart = 1;
+
+       if (cfg->dblocks) {
+               /*
+                * If the user specified the size of the data device but not
+                * the start of the internal rt device, set the internal rt
+                * volume to start at the end of the data device.
+                */
+               return cfg->dblocks << (cfg->blocklog - BBSHIFT);
+       }
+
+       /*
+        * By default reserve at 1% of the total capacity (rounded up to the
+        * next power of two) for metadata, but match the minimum we enforce
+        * elsewhere. This matches what SMR HDDs provide.
+        */
+       rt_target_size = max((xi->data.size + 99) / 100,
+                            BTOBB(300 * 1024 * 1024));
+
+       while (rtstart < rt_target_size)
+               rtstart <<= 1;
+       return rtstart;
+}
+
 static void
 open_devices(
        struct mkfs_params      *cfg,
@@ -3720,17 +3736,7 @@
                zt->rt.zone_capacity = zt->data.zone_capacity;
                zt->rt.nr_zones = zt->data.nr_zones - zt->data.nr_conv_zones;
        } else if (cfg->sb_feat.zoned && !cfg->rtstart && !xi->rt.dev) {
-               /*
-                * By default reserve at 1% of the total capacity (rounded up to
-                * the next power of two) for metadata, but match the minimum we
-                * enforce elsewhere. This matches what SMR HDDs provide.
-                */
-               uint64_t rt_target_size = max((xi->data.size + 99) / 100,
-                                             BTOBB(300 * 1024 * 1024));
-
-               cfg->rtstart = 1;
-               while (cfg->rtstart < rt_target_size)
-                       cfg->rtstart <<= 1;
+               cfg->rtstart = calc_rtstart(cfg, xi);
        }
 
        if (cfg->rtstart) {
@@ -4559,10 +4565,11 @@
                                cfg->rgsize;
 
        if (cfg->rgcount > max_zones) {
-               fprintf(stderr,
+               if (cli->rtsize)
+                       fprintf(stderr,
 _("Warning: not enough zones (%lu/%u) for backing requested rt size due to\n"
   "over-provisioning needs, writable size will be less than %s\n"),
-                       cfg->rgcount, max_zones, cli->rtsize);
+                               cfg->rgcount, max_zones, cli->rtsize);
                cfg->rgcount = max_zones;
        }
        new_rtblocks = (cfg->rgcount * cfg->rgsize);
@@ -5823,6 +5830,7 @@
        }
 
        libxfs_irele(args.dp);
+       free(p);
 }
 
 /* Write the realtime superblock */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/repair/zoned.c new/xfsprogs-6.19.0/repair/zoned.c
--- old/xfsprogs-6.18.0/repair/zoned.c  2025-06-23 13:48:41.000000000 +0200
+++ new/xfsprogs-6.19.0/repair/zoned.c  2026-03-12 19:35:19.000000000 +0100
@@ -3,10 +3,10 @@
  * Copyright (c) 2024 Christoph Hellwig.
  */
 #include <ctype.h>
-#include <linux/blkzoned.h>
 #include "libxfs_priv.h"
 #include "libxfs.h"
 #include "xfs_zones.h"
+#include "libfrog/zones.h"
 #include "err_protos.h"
 #include "zoned.h"
 
@@ -51,8 +51,7 @@
        uint64_t                sector = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rtstart);
        unsigned int            zone_size, zone_capacity;
        uint64_t                device_size;
-       size_t                  rep_size;
-       struct blk_zone_report  *rep;
+       struct xfrog_zone_report *rep = NULL;
        unsigned int            i, n = 0;
 
        if (ioctl(fd, BLKGETSIZE64, &device_size))
@@ -67,31 +66,18 @@
                return;
        }
 
-       rep_size = sizeof(struct blk_zone_report) +
-                  sizeof(struct blk_zone) * ZONES_PER_IOCTL;
-       rep = malloc(rep_size);
-       if (!rep) {
-               do_warn(_("malloc failed for zone report\n"));
-               return;
-       }
-
        while (n < mp->m_sb.sb_rgcount) {
-               struct blk_zone *zones = (struct blk_zone *)(rep + 1);
-               int ret;
+               struct blk_zone *zones;
 
-               memset(rep, 0, rep_size);
-               rep->sector = sector;
-               rep->nr_zones = ZONES_PER_IOCTL;
-
-               ret = ioctl(fd, BLKREPORTZONE, rep);
-               if (ret) {
-                       do_error(_("ioctl(BLKREPORTZONE) failed: %d!\n"), ret);
-                       goto out_free;
-               }
-               if (!rep->nr_zones)
+               rep = xfrog_report_zones(fd, sector, rep);
+               if (!rep)
+                       return;
+
+               if (!rep->rep.nr_zones)
                        break;
 
-               for (i = 0; i < rep->nr_zones; i++) {
+               zones = rep->zones;
+               for (i = 0; i < rep->rep.nr_zones; i++) {
                        if (n >= mp->m_sb.sb_rgcount)
                                break;
 
@@ -130,8 +116,8 @@
                        report_zones_cb(mp, &zones[i]);
                        n++;
                }
-               sector = zones[rep->nr_zones - 1].start +
-                        zones[rep->nr_zones - 1].len;
+               sector = zones[rep->rep.nr_zones - 1].start +
+                        zones[rep->rep.nr_zones - 1].len;
        }
 
 out_free:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/scrub/Makefile new/xfsprogs-6.19.0/scrub/Makefile
--- old/xfsprogs-6.18.0/scrub/Makefile  2025-10-20 16:17:55.000000000 +0200
+++ new/xfsprogs-6.19.0/scrub/Makefile  2026-03-12 19:35:19.000000000 +0100
@@ -16,7 +16,7 @@
 INSTALL_SCRUB = install-scrub
 XFS_SCRUB_ALL_PROG = xfs_scrub_all.py
 XFS_SCRUB_FAIL_PROG = xfs_scrub_fail
-XFS_SCRUB_ARGS = -p
+XFS_SCRUB_ARGS = -o autofsck
 XFS_SCRUB_SERVICE_ARGS = -b -o autofsck
 ifeq ($(HAVE_SYSTEMD),yes)
 INSTALL_SCRUB += install-systemd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xfsprogs-6.18.0/scrub/xfs_scrub_all.py.in 
new/xfsprogs-6.19.0/scrub/xfs_scrub_all.py.in
--- old/xfsprogs-6.18.0/scrub/xfs_scrub_all.py.in       2025-10-20 
16:17:55.000000000 +0200
+++ new/xfsprogs-6.19.0/scrub/xfs_scrub_all.py.in       2026-03-12 
19:35:19.000000000 +0100
@@ -102,7 +102,8 @@
                cmd = ['@sbindir@/xfs_scrub']
                if 'SERVICE_MODE' in os.environ:
                        cmd += '@scrub_service_args@'.split()
-               cmd += '@scrub_args@'.split()
+               else:
+                       cmd += '@scrub_args@'.split()
                if scrub_media:
                        cmd += '-x'
                cmd += [mnt]

Reply via email to