All of lore.kernel.org
 help / color / mirror / Atom feed
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"

  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.