diff --git a/xfsdump-3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch b/xfsdump-3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch new file mode 100644 index 0000000..0b6cae3 --- /dev/null +++ b/xfsdump-3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch @@ -0,0 +1,65 @@ +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 | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/restore/tree.c b/restore/tree.c +index 4707fdc..69301d9 100644 +--- a/restore/tree.c ++++ b/restore/tree.c +@@ -1322,6 +1322,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; +@@ -1338,6 +1339,7 @@ noref_elim_recurse(nh_t parh, + 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; +@@ -1353,6 +1355,11 @@ noref_elim_recurse(nh_t parh, + + Node_unmap(cldh, &cldp); + ++ if (!isselpr) { ++ cldh = nextcldh; ++ continue; ++ } ++ + if (isdirpr) { + bool_t ok; + +-- +2.47.3 + diff --git a/xfsdump.spec b/xfsdump.spec index adc6a3b..fbc83c6 100644 --- a/xfsdump.spec +++ b/xfsdump.spec @@ -1,7 +1,7 @@ Summary: Backup and restore utilities for the XFS filesystem Name: xfsdump Version: 3.2.0 -Release: 1%{?dist} +Release: 2%{?dist} # Licensing based on generic "GNU GENERAL PUBLIC LICENSE" # in source, with no mention of version. License: GPL-1.0-or-later @@ -15,6 +15,8 @@ BuildRequires: xfsprogs-devel, libuuid-devel, libattr-devel ncurses-devel BuildRequires: gnupg2, xz Requires: xfsprogs >= 2.6.30, attr >= 2.0.0 +Patch0: xfsdump-3.3.0-xfsrestore-only-process-subtrees-that-are-selected.patch + %description The xfsdump package contains xfsdump, xfsrestore and a number of other utilities for administering XFS filesystems. @@ -34,7 +36,7 @@ subtrees may be restored from full or partial backups. %prep xzcat '%{SOURCE0}' | %{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data=- -%setup -q +%autosetup -p1 %build %configure @@ -63,6 +65,10 @@ mkdir -p $RPM_BUILD_ROOT/%{_sharedstatedir}/xfsdump/inventory %{_sharedstatedir}/xfsdump/inventory %changelog +* Thu Mar 26 2026 Donald Douwsma - 3.2.0-2 +- xfsrestore: only process subtrees that are selected +- Related: RHEL-31075 + * Wed Nov 27 2024 Pavel Reichl - 3.2.0-1 - Update to new upstream version 3.2.0 - Related: RHEL-69388