From: "Darrick J. Wong" <djwong@kernel.org>
To: sandeen@sandeen.net
Cc: linux-xfs@vger.kernel.org, allison.henderson@oracle.com,
Dave Chinner <david@fromorbit.com>
Subject: [PATCH v1.1 04/17] libfrog: always use the kernel GETFSMAP definitions
Date: Tue, 8 Feb 2022 08:46:05 -0800 [thread overview]
Message-ID: <20220208164605.GC8313@magnolia> (raw)
In-Reply-To: <164263811682.863810.12064586264139896800.stgit@magnolia>
From: Darrick J. Wong <djwong@kernel.org>
The GETFSMAP ioctl has been a part of the kernel since 4.12. We have no
business shipping a stale copy of kernel header contents in the xfslibs
package, so get rid of it. This means that xfs_scrub now has a hard
dependency on the build system having new kernel headers.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
include/linux.h | 105 -----------------------------------------------------
io/Makefile | 5 +--
io/fsmap.c | 1 +
scrub/Makefile | 7 +---
scrub/phase6.c | 1 +
scrub/phase7.c | 1 +
scrub/spacemap.c | 1 +
spaceman/Makefile | 5 +--
spaceman/freesp.c | 1 +
9 files changed, 11 insertions(+), 116 deletions(-)
diff --git a/include/linux.h b/include/linux.h
index de8a7122..3d9f4e3d 100644
--- a/include/linux.h
+++ b/include/linux.h
@@ -251,111 +251,6 @@ struct fsxattr {
#define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
#endif
-#ifdef HAVE_GETFSMAP
-# include <linux/fsmap.h>
-#else
-/*
- * Structure for FS_IOC_GETFSMAP.
- *
- * The memory layout for this call are the scalar values defined in
- * struct fsmap_head, followed by two struct fsmap that describe
- * the lower and upper bound of mappings to return, followed by an
- * array of struct fsmap mappings.
- *
- * fmh_iflags control the output of the call, whereas fmh_oflags report
- * on the overall record output. fmh_count should be set to the
- * length of the fmh_recs array, and fmh_entries will be set to the
- * number of entries filled out during each call. If fmh_count is
- * zero, the number of reverse mappings will be returned in
- * fmh_entries, though no mappings will be returned. fmh_reserved
- * must be set to zero.
- *
- * The two elements in the fmh_keys array are used to constrain the
- * output. The first element in the array should represent the
- * lowest disk mapping ("low key") that the user wants to learn
- * about. If this value is all zeroes, the filesystem will return
- * the first entry it knows about. For a subsequent call, the
- * contents of fsmap_head.fmh_recs[fsmap_head.fmh_count - 1] should be
- * copied into fmh_keys[0] to have the kernel start where it left off.
- *
- * The second element in the fmh_keys array should represent the
- * highest disk mapping ("high key") that the user wants to learn
- * about. If this value is all ones, the filesystem will not stop
- * until it runs out of mapping to return or runs out of space in
- * fmh_recs.
- *
- * fmr_device can be either a 32-bit cookie representing a device, or
- * a 32-bit dev_t if the FMH_OF_DEV_T flag is set. fmr_physical,
- * fmr_offset, and fmr_length are expressed in units of bytes.
- * fmr_owner is either an inode number, or a special value if
- * FMR_OF_SPECIAL_OWNER is set in fmr_flags.
- */
-struct fsmap {
- __u32 fmr_device; /* device id */
- __u32 fmr_flags; /* mapping flags */
- __u64 fmr_physical; /* device offset of segment */
- __u64 fmr_owner; /* owner id */
- __u64 fmr_offset; /* file offset of segment */
- __u64 fmr_length; /* length of segment */
- __u64 fmr_reserved[3]; /* must be zero */
-};
-
-struct fsmap_head {
- __u32 fmh_iflags; /* control flags */
- __u32 fmh_oflags; /* output flags */
- __u32 fmh_count; /* # of entries in array incl. input */
- __u32 fmh_entries; /* # of entries filled in (output). */
- __u64 fmh_reserved[6]; /* must be zero */
-
- struct fsmap fmh_keys[2]; /* low and high keys for the mapping search */
- struct fsmap fmh_recs[]; /* returned records */
-};
-
-/* Size of an fsmap_head with room for nr records. */
-static inline size_t
-fsmap_sizeof(
- unsigned int nr)
-{
- return sizeof(struct fsmap_head) + nr * sizeof(struct fsmap);
-}
-
-/* Start the next fsmap query at the end of the current query results. */
-static inline void
-fsmap_advance(
- struct fsmap_head *head)
-{
- head->fmh_keys[0] = head->fmh_recs[head->fmh_entries - 1];
-}
-
-/* fmh_iflags values - set by XFS_IOC_GETFSMAP caller in the header. */
-/* no flags defined yet */
-#define FMH_IF_VALID 0
-
-/* fmh_oflags values - returned in the header segment only. */
-#define FMH_OF_DEV_T 0x1 /* fmr_device values will be dev_t */
-
-/* fmr_flags values - returned for each non-header segment */
-#define FMR_OF_PREALLOC 0x1 /* segment = unwritten pre-allocation */
-#define FMR_OF_ATTR_FORK 0x2 /* segment = attribute fork */
-#define FMR_OF_EXTENT_MAP 0x4 /* segment = extent map */
-#define FMR_OF_SHARED 0x8 /* segment = shared with another file */
-#define FMR_OF_SPECIAL_OWNER 0x10 /* owner is a special value */
-#define FMR_OF_LAST 0x20 /* segment is the last in the FS */
-
-/* Each FS gets to define its own special owner codes. */
-#define FMR_OWNER(type, code) (((__u64)type << 32) | \
- ((__u64)code & 0xFFFFFFFFULL))
-#define FMR_OWNER_TYPE(owner) ((__u32)((__u64)owner >> 32))
-#define FMR_OWNER_CODE(owner) ((__u32)(((__u64)owner & 0xFFFFFFFFULL)))
-#define FMR_OWN_FREE FMR_OWNER(0, 1) /* free space */
-#define FMR_OWN_UNKNOWN FMR_OWNER(0, 2) /* unknown owner */
-#define FMR_OWN_METADATA FMR_OWNER(0, 3) /* metadata */
-
-#define FS_IOC_GETFSMAP _IOWR('X', 59, struct fsmap_head)
-
-#define HAVE_GETFSMAP
-#endif /* HAVE_GETFSMAP */
-
#ifndef HAVE_MAP_SYNC
#define MAP_SYNC 0
#define MAP_SHARED_VALIDATE 0
diff --git a/io/Makefile b/io/Makefile
index 71741926..498174cf 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -104,10 +104,9 @@ LLDLIBS += $(LIBDEVMAPPER)
LCFLAGS += -DHAVE_DEVMAPPER
endif
-# On linux we get fsmap from the system or define it ourselves
-# so include this unconditionally. If this reverts to only
-# the autoconf check w/o local definition, test HAVE_GETFSMAP
+ifeq ($(HAVE_GETFSMAP),yes)
CFILES += fsmap.c
+endif
ifeq ($(HAVE_STATFS_FLAGS),yes)
LCFLAGS += -DHAVE_STATFS_FLAGS
diff --git a/io/fsmap.c b/io/fsmap.c
index f540a7c0..9dd19cc0 100644
--- a/io/fsmap.c
+++ b/io/fsmap.c
@@ -4,6 +4,7 @@
* Author: Darrick J. Wong <darrick.wong@oracle.com>
*/
#include "platform_defs.h"
+#include <linux/fsmap.h>
#include "command.h"
#include "init.h"
#include "libfrog/paths.h"
diff --git a/scrub/Makefile b/scrub/Makefile
index fd6bb679..335e1e8d 100644
--- a/scrub/Makefile
+++ b/scrub/Makefile
@@ -6,12 +6,9 @@ TOPDIR = ..
builddefs=$(TOPDIR)/include/builddefs
include $(builddefs)
-# On linux we get fsmap from the system or define it ourselves
-# so include this based on platform type. If this reverts to only
-# the autoconf check w/o local definition, change to testing HAVE_GETFSMAP
-SCRUB_PREREQS=$(HAVE_OPENAT)$(HAVE_FSTATAT)
+SCRUB_PREREQS=$(HAVE_OPENAT)$(HAVE_FSTATAT)$(HAVE_GETFSMAP)
-ifeq ($(SCRUB_PREREQS),yesyes)
+ifeq ($(SCRUB_PREREQS),yesyesyes)
LTCOMMAND = xfs_scrub
INSTALL_SCRUB = install-scrub
XFS_SCRUB_ALL_PROG = xfs_scrub_all
diff --git a/scrub/phase6.c b/scrub/phase6.c
index 87828b60..afdb16b6 100644
--- a/scrub/phase6.c
+++ b/scrub/phase6.c
@@ -7,6 +7,7 @@
#include <stdint.h>
#include <dirent.h>
#include <sys/statvfs.h>
+#include <linux/fsmap.h>
#include "handle.h"
#include "libfrog/paths.h"
#include "libfrog/workqueue.h"
diff --git a/scrub/phase7.c b/scrub/phase7.c
index bc652ab6..84546b1c 100644
--- a/scrub/phase7.c
+++ b/scrub/phase7.c
@@ -7,6 +7,7 @@
#include <stdint.h>
#include <stdlib.h>
#include <sys/statvfs.h>
+#include <linux/fsmap.h>
#include "libfrog/paths.h"
#include "libfrog/ptvar.h"
#include "list.h"
diff --git a/scrub/spacemap.c b/scrub/spacemap.c
index a5508d56..03440d3a 100644
--- a/scrub/spacemap.c
+++ b/scrub/spacemap.c
@@ -8,6 +8,7 @@
#include <string.h>
#include <pthread.h>
#include <sys/statvfs.h>
+#include <linux/fsmap.h>
#include "libfrog/workqueue.h"
#include "libfrog/paths.h"
#include "xfs_scrub.h"
diff --git a/spaceman/Makefile b/spaceman/Makefile
index 2a366918..1f048d54 100644
--- a/spaceman/Makefile
+++ b/spaceman/Makefile
@@ -18,10 +18,9 @@ ifeq ($(ENABLE_EDITLINE),yes)
LLDLIBS += $(LIBEDITLINE) $(LIBTERMCAP)
endif
-# On linux we get fsmap from the system or define it ourselves
-# so include this unconditionally. If this reverts to only
-# the autoconf check w/o local definition, test HAVE_GETFSMAP
+ifeq ($(HAVE_GETFSMAP),yes)
CFILES += freesp.c
+endif
default: depend $(LTCOMMAND)
diff --git a/spaceman/freesp.c b/spaceman/freesp.c
index de301c19..423568a4 100644
--- a/spaceman/freesp.c
+++ b/spaceman/freesp.c
@@ -8,6 +8,7 @@
#include "libxfs.h"
#include <linux/fiemap.h>
+#include <linux/fsmap.h>
#include "libfrog/fsgeom.h"
#include "command.h"
#include "init.h"
next prev parent reply other threads:[~2022-02-08 16:46 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-20 0:21 [PATCHSET 00/17] xfsprogs: various 5.15 fixes Darrick J. Wong
2022-01-20 0:21 ` [PATCH 01/17] libxcmd: use emacs mode for command history editing Darrick J. Wong
2022-01-20 0:21 ` [PATCH 02/17] libxfs: shut down filesystem if we xfs_trans_cancel with deferred work items Darrick J. Wong
2022-02-04 21:36 ` Eric Sandeen
2022-02-04 21:47 ` Darrick J. Wong
2022-01-20 0:21 ` [PATCH 03/17] libxfs: don't leave dangling perag references from xfs_buf Darrick J. Wong
2022-02-04 22:05 ` Eric Sandeen
2022-01-20 0:21 ` [PATCH 04/17] libfrog: move the GETFSMAP definitions into libfrog Darrick J. Wong
2022-02-04 23:18 ` Eric Sandeen
2022-02-05 0:36 ` Darrick J. Wong
2022-02-07 1:05 ` Dave Chinner
2022-02-07 17:09 ` Darrick J. Wong
2022-02-07 21:32 ` Eric Sandeen
2022-02-10 3:33 ` Dave Chinner
2022-02-08 16:46 ` Darrick J. Wong [this message]
2022-02-25 22:35 ` [PATCH v1.1 04/17] libfrog: always use the kernel GETFSMAP definitions Eric Sandeen
2022-01-20 0:22 ` [PATCH 05/17] misc: add a crc32c self test to mkfs and repair Darrick J. Wong
2022-02-04 23:23 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 06/17] libxfs-apply: support filterdiff >= 0.4.2 only Darrick J. Wong
2022-01-20 0:22 ` [PATCH 07/17] xfs_db: fix nbits parameter in fa_ino[48] functions Darrick J. Wong
2022-02-25 21:45 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 08/17] xfs_repair: explicitly cast resource usage counts in do_warn Darrick J. Wong
2022-02-25 21:46 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 09/17] xfs_repair: explicitly cast directory inode numbers " Darrick J. Wong
2022-02-25 21:48 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 10/17] xfs_repair: fix indentation problems in upgrade_filesystem Darrick J. Wong
2022-02-25 21:53 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 11/17] xfs_repair: update secondary superblocks after changing features Darrick J. Wong
2022-02-25 21:57 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 12/17] xfs_scrub: report optional features in version string Darrick J. Wong
2022-01-20 1:16 ` Theodore Ts'o
2022-01-20 1:28 ` Darrick J. Wong
2022-01-20 1:32 ` [PATCH v2 " Darrick J. Wong
2022-02-25 22:14 ` Eric Sandeen
2022-02-26 0:04 ` Darrick J. Wong
2022-02-26 2:48 ` Darrick J. Wong
2022-02-26 2:53 ` [PATCH v3 " Darrick J. Wong
2022-02-28 21:38 ` Eric Sandeen
2022-01-20 0:22 ` [PATCH 13/17] mkfs: prevent corruption of passed-in suboption string values Darrick J. Wong
2022-01-20 0:22 ` [PATCH 14/17] mkfs: add configuration files for the last few LTS kernels Darrick J. Wong
2022-01-20 0:22 ` [PATCH 15/17] mkfs: document sample configuration file location Darrick J. Wong
2022-01-20 0:23 ` [PATCH 16/17] mkfs: add a config file for x86_64 pmem filesystems Darrick J. Wong
2022-02-25 22:21 ` Eric Sandeen
2022-02-26 2:38 ` Darrick J. Wong
2022-02-26 2:52 ` [PATCH v2 " Darrick J. Wong
2022-02-28 21:37 ` Eric Sandeen
2022-01-20 0:23 ` [PATCH 17/17] mkfs: enable inobtcount and bigtime by default Darrick J. Wong
2022-02-25 22:22 ` Eric Sandeen
2022-01-28 22:44 ` [PATCH 18/17] xfs_scrub: fix reporting if we can't open raw block devices Darrick J. Wong
2022-01-31 12:28 ` Christoph Hellwig
2022-02-26 2:54 ` [PATCH 19/17] mkfs: increase default log size for new (aka bigtime) filesystems Darrick J. Wong
2022-02-26 21:37 ` Dave Chinner
2022-02-28 23:22 ` Darrick J. Wong
2022-03-01 0:42 ` Dave Chinner
2022-03-01 2:38 ` Darrick J. Wong
2022-03-01 15:55 ` Brian Foster
2022-03-01 3:10 ` Dave Chinner
2022-02-28 21:44 ` Eric Sandeen
2022-03-01 2:21 ` Darrick J. Wong
2022-03-01 2:44 ` Eric Sandeen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220208164605.GC8313@magnolia \
--to=djwong@kernel.org \
--cc=allison.henderson@oracle.com \
--cc=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@sandeen.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox