diff --git a/0010-v3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch b/0010-v3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch new file mode 100644 index 0000000..e78412b --- /dev/null +++ b/0010-v3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch @@ -0,0 +1,75 @@ +From dd63de5d42e1073c09314fb1afc82c55e91c2853 Mon Sep 17 00:00:00 2001 +From: Donald Douwsma +Date: Thu, 26 Mar 2026 13:54:43 +1100 +Subject: [PATCH] xfsrestore: only process subtrees that are selected + +We are getting reports from the field where xfsrestore is aborting due +to the failed assertion: + + # xfsrestore -r -f /tmp/l0.dump -s somedir /mnt/scratch + ... + # xfsrestore -r -f /tmp/l2.dump /mnt/scratch + ... + xfsrestore: 8 directories and 7 entries processed + xfsrestore: directory post-processing + xfsrestore: tree.c:1369: noref_elim_recurse: Assertion `isrealpr' failed. + +This occurs for cumulative restores where the initial restore has used +the subtree option to limit the trees being restored. If a subsequent +restore encounters a rename for a node outside of the selected trees it +aborts when It cannot find the directory to rename. + +Make sure we skip processing for directories outside the selected trees +when eliminating unreferenced nodes in tree post processing. + +Signed-off-by: Donald Douwsma +Reviewed-by: Andrey Albershteyn +--- + restore/tree.c | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +diff --git a/restore/tree.c b/restore/tree.c +index 0eb9fa3..44a46ea 100644 +--- a/restore/tree.c ++++ b/restore/tree.c +@@ -1278,6 +1278,7 @@ noref_elim_recurse( nh_t parh, + gen_t gen; + bool_t inorphanagepr; + bool_t isdirpr; ++ bool_t isselpr; + bool_t isrealpr; + bool_t isrefpr; + bool_t isrenamepr; +@@ -1291,10 +1292,11 @@ noref_elim_recurse( nh_t parh, + ino = cldp->n_ino; + gen = cldp->n_gen; + inorphanagepr = cldp->n_parh == persp->p_orphh; +- isdirpr = ( cldp->n_flags & NF_ISDIR ); +- isrealpr = ( cldp->n_flags & NF_REAL ); +- isrefpr = ( cldp->n_flags & NF_REFED ); +- isrenamepr = ( isdirpr && cldp->n_lnkh != NH_NULL ); ++ isdirpr = (cldp->n_flags & NF_ISDIR); ++ isrealpr = (cldp->n_flags & NF_REAL); ++ isrefpr = (cldp->n_flags & NF_REFED); ++ isselpr = (cldp->n_flags & NF_SUBTREE); ++ isrenamepr = (isdirpr && cldp->n_lnkh != NH_NULL); + renameh = cldp->n_lnkh; + grandcldh = cldp->n_cldh; + nextcldh = cldp->n_sibh; +@@ -1309,7 +1311,12 @@ noref_elim_recurse( nh_t parh, + + Node_unmap( cldh, &cldp ); + +- if ( isdirpr ) { ++ if (!isselpr) { ++ cldh = nextcldh; ++ continue; ++ } ++ ++ if (isdirpr) { + bool_t ok; + + ok = noref_elim_recurse( cldh, +-- +2.47.3 + diff --git a/xfsdump.spec b/xfsdump.spec index dcd3f35..ccb68b0 100644 --- a/xfsdump.spec +++ b/xfsdump.spec @@ -1,7 +1,7 @@ Summary: Administrative utilities for the XFS filesystem Name: xfsdump Version: 3.1.8 -Release: 7%{?dist} +Release: 8%{?dist} # Licensing based on generic "GNU GENERAL PUBLIC LICENSE" # in source, with no mention of version. License: GPL+ @@ -17,6 +17,7 @@ Patch5: 0006-v3.1.12-xfsrestore-fix-on-media-inventory-stream-unpacking.patch Patch6: 0007-v3.1.12-xfsdump-fix-on-media-inventory-stream-packing.patch Patch7: 0008-v3.1.12-xfsrestore-untangle-inventory-unpacking-logic.patch Patch8: 0009-v3.1.13-xfsrestore-suggest-x-rather-than-assert-for-false-ro.patch +Patch9: 0010-v3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: libtool, gettext, gawk BuildRequires: xfsprogs-devel, libuuid-devel, libattr-devel ncurses-devel @@ -50,6 +51,7 @@ subtrees may be restored from full or partial backups. %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 %build %configure @@ -83,6 +85,10 @@ rm -rf $RPM_BUILD_ROOT %{_sharedstatedir}/xfsdump/inventory %changelog +* Tue Jun 2 2026 Donald Douwsma - 3.1.8-8 +- xfsrestore: only process subtrees that are selected +- Related: RHEL-31075, RHEL-179062 + * Thu Oct 05 2023 Pavel Reichl - 3.1.8-7 - xfsdump/xfsrestore: suggest recovery for false roots may be possible using -x - Related: RHEL-11883