diff --git a/0001-xfsdump-Revert-xfsdump-handle-bind-mount-targets.patch b/0001-xfsdump-Revert-xfsdump-handle-bind-mount-targets.patch deleted file mode 100644 index 36eed79..0000000 --- a/0001-xfsdump-Revert-xfsdump-handle-bind-mount-targets.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 3b71c7f1f5a1dd45712d7de1139290d0a8cf03c4 Mon Sep 17 00:00:00 2001 -From: Gao Xiang -Date: Thu, 3 Feb 2022 12:42:30 -0500 -Subject: [PATCH] xfsdump: Revert "xfsdump: handle bind mount targets" - -Bind mount mntpnts will be forbided in the next commits -instead since it's not the real rootdir. - -This cannot be reverted cleanly due to several cleanup -patches, but the logic is reverted equivalently. - -This reverts commit 25195ebf107dc81b1b7cea1476764950e1d6cc9d. - -Fixes: 25195ebf107d ("xfsdump: handle bind mount targets") -Cc: Eric Sandeen -Signed-off-by: Gao Xiang -Reviewed-by: Eric Sandeen -Signed-off-by: Eric Sandeen ---- - dump/content.c | 21 ++------------------- - 1 file changed, 2 insertions(+), 19 deletions(-) - -diff --git a/dump/content.c b/dump/content.c -index 75b7922..a1a114c 100644 ---- a/dump/content.c -+++ b/dump/content.c -@@ -1382,17 +1382,10 @@ baseuuidbypass: - } - - /* figure out the ino for the root directory of the fs -- * and get its struct xfs_bstat for inomap_build(). This could -- * be a bind mount; don't ask for the mount point inode, -- * find the actual lowest inode number in the filesystem. -+ * and get its xfs_bstat_t for inomap_build() - */ - { - stat64_t rootstat; -- xfs_ino_t lastino = 0; -- int ocount = 0; -- struct xfs_fsop_bulkreq bulkreq; -- -- /* Get the inode of the mount point */ - rval = fstat64(sc_fsfd, &rootstat); - if (rval) { - mlog(MLOG_NORMAL, _( -@@ -1404,21 +1397,11 @@ baseuuidbypass: - (struct xfs_bstat *)calloc(1, sizeof(struct xfs_bstat)); - assert(sc_rootxfsstatp); - -- /* Get the first valid (i.e. root) inode in this fs */ -- bulkreq.lastip = (__u64 *)&lastino; -- bulkreq.icount = 1; -- bulkreq.ubuffer = sc_rootxfsstatp; -- bulkreq.ocount = &ocount; -- if (ioctl(sc_fsfd, XFS_IOC_FSBULKSTAT, &bulkreq) < 0) { -+ if (bigstat_one(sc_fsfd, rootstat.st_ino, sc_rootxfsstatp) < 0) { - mlog(MLOG_ERROR, - _("failed to get bulkstat information for root inode\n")); - return BOOL_FALSE; - } -- -- if (sc_rootxfsstatp->bs_ino != rootstat.st_ino) -- mlog (MLOG_NORMAL | MLOG_NOTE, -- _("root ino %lld differs from mount dir ino %lld, bind mount?\n"), -- sc_rootxfsstatp->bs_ino, rootstat.st_ino); - } - - /* alloc a file system handle, to be used with the jdm_open() --- -2.35.3 - diff --git a/0002-xfsdump-intercept-bind-mount-targets.patch b/0002-xfsdump-intercept-bind-mount-targets.patch deleted file mode 100644 index 7b00d6e..0000000 --- a/0002-xfsdump-intercept-bind-mount-targets.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 0717c1cdfeaedc98df8af97b5ab110830e176a5b Mon Sep 17 00:00:00 2001 -From: Gao Xiang -Date: Thu, 3 Feb 2022 12:42:30 -0500 -Subject: [PATCH] xfsdump: intercept bind mount targets - -It's a bit strange pointing at some non-root bind mount target and -then actually dumping from the actual root dir instead. - -Therefore, instead of searching for the root dir of the filesystem, -just intercept all bind mount targets by checking whose ino # of -".." is itself with getdents. - -Fixes: 25195ebf107d ("xfsdump: handle bind mount targets") -Cc: Eric Sandeen -Signed-off-by: Gao Xiang -[sandeen: add explanatory comment to new function] -Reviewed-by: Eric Sandeen -Signed-off-by: Eric Sandeen ---- - dump/content.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 62 insertions(+) - -diff --git a/dump/content.c b/dump/content.c -index a1a114c..6188b25 100644 ---- a/dump/content.c -+++ b/dump/content.c -@@ -511,6 +511,60 @@ static bool_t create_inv_session( - ix_t subtreecnt, - size_t strmix); - -+/* -+ * Verify that we are asked to dump from the root of the filesystem; -+ * test this by checking whether the inode number we've been given matches -+ * the inode number for this directory's ".." -+ */ -+static bool_t -+check_rootdir(int fd, -+ xfs_ino_t ino) -+{ -+ struct dirent *gdp; -+ size_t gdsz; -+ bool_t found = BOOL_FALSE; -+ -+ gdsz = sizeof(struct dirent) + NAME_MAX + 1; -+ if (gdsz < GETDENTSBUF_SZ_MIN) -+ gdsz = GETDENTSBUF_SZ_MIN; -+ gdp = (struct dirent *)calloc(1, gdsz); -+ assert(gdp); -+ -+ while (1) { -+ struct dirent *p; -+ int nread; -+ -+ nread = getdents_wrap(fd, (char *)gdp, gdsz); -+ /* -+ * negative count indicates something very bad happened; -+ * try to gracefully end this dir. -+ */ -+ if (nread < 0) { -+ mlog(MLOG_NORMAL | MLOG_WARNING, -+_("unable to read dirents for directory ino %llu: %s\n"), -+ ino, strerror(errno)); -+ break; -+ } -+ -+ /* no more directory entries: break; */ -+ if (!nread) -+ break; -+ -+ for (p = gdp; nread > 0; -+ nread -= (int)p->d_reclen, -+ assert(nread >= 0), -+ p = (struct dirent *)((char *)p + p->d_reclen)) { -+ if (!strcmp(p->d_name, "..")) { -+ if (p->d_ino == ino) -+ found = BOOL_TRUE; -+ break; -+ } -+ } -+ } -+ free(gdp); -+ return found; -+} -+ - bool_t - content_init(int argc, - char *argv[], -@@ -1393,6 +1447,14 @@ baseuuidbypass: - mntpnt); - return BOOL_FALSE; - } -+ -+ if (!check_rootdir(sc_fsfd, rootstat.st_ino)) { -+ mlog(MLOG_ERROR, -+_("%s is not the root of the filesystem (bind mount?) - use primary mountpoint\n"), -+ mntpnt); -+ return BOOL_FALSE; -+ } -+ - sc_rootxfsstatp = - (struct xfs_bstat *)calloc(1, sizeof(struct xfs_bstat)); - assert(sc_rootxfsstatp); --- -2.35.3 - diff --git a/xfsdump-3.1.11.tar.xz b/xfsdump-3.1.11.tar.xz new file mode 100644 index 0000000..8f8800e Binary files /dev/null and b/xfsdump-3.1.11.tar.xz differ diff --git a/xfsdump-3.1.9.tar.xz b/xfsdump-3.1.9.tar.xz deleted file mode 100644 index 2942a10..0000000 Binary files a/xfsdump-3.1.9.tar.xz and /dev/null differ diff --git a/xfsdump.spec b/xfsdump.spec index 4478049..54b1fc2 100644 --- a/xfsdump.spec +++ b/xfsdump.spec @@ -1,12 +1,10 @@ Name: xfsdump -Version: 3.1.9 -Release: 3 +Version: 3.1.11 +Release: 1 Summary: Tools create and restore for the XFS filesystem License: GPLv2 URL: http://xfs.org Source0: http://kernel.org/pub/linux/utils/fs/xfs/%{name}/%{name}-%{version}.tar.xz -Patch01: 0001-xfsdump-Revert-xfsdump-handle-bind-mount-targets.patch -Patch02: 0002-xfsdump-intercept-bind-mount-targets.patch BuildRequires: libtool, gettext, gawk BuildRequires: xfsprogs-devel, ncurses-devel, libuuid-devel, libattr-devel @@ -50,6 +48,9 @@ mkdir -p %{buildroot}/%{_sharedstatedir}/xfsdump/inventory %changelog +* Thu Oct 20 2022 yangchenguang - 3.1.11-1 +- update xfsdump version to 3.1.11-1 + * Thu Sep 29 2022 Jun Yang - 3.1.9-3 - Add patches to fix failed cases of xfstest xfs/544,545