[PATCH 2/3] xfsdump: default to V3, use V4 if projid32bit is set

Eric Sandeen
2012-10-12T21:35:57Z

Because 32-bit project ID is not default and semi-rare,
default to version 3 dumps unless dumping a filesystem
with the 32-bit project ID feature flag set.

XFS_FSOP_GEOM_FLAGS_PROJID32 is a newish flag so I've
redefined it here just in caes as well.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---

diff --git a/common/fs.h b/common/fs.h
index 878385b..7e63f8e 100644
--- a/common/fs.h
+++ b/common/fs.h
@@ -26,6 +26,10 @@
#define FS_MAXNAMELEN_DEFAULT 256
#define FS_MAXPATHLEN_DEFAULT 1024

+#ifndef XFS_FSOP_GEOM_FLAGS_PROJID32
+#define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800
+#endif
+
/* fs_info - decides if a source name describes a file system, and if
* so returns useful information about that file system.
*
diff --git a/common/global.h b/common/global.h
index 5138ed8..a847c5d 100644
--- a/common/global.h
+++ b/common/global.h
@@ -29,14 +29,14 @@
#define GLOBAL_HDR_VERSION_2 2
#define GLOBAL_HDR_VERSION_3 3
#define GLOBAL_HDR_VERSION_4 4
- /* version 4 adds 32-bit projid (projid_hi)
+ /* version 4 adds 32-bit projid (projid_hi) only used if projid32 in place.
* version 3 uses the full 32-bit inode generation number in direnthdr_t.
* version 2 adds encoding of holes and a change to on-tape inventory format.
* version 1 adds extended file attribute dumping.
* version 0 xfsrestore can't handle media produced
* by version 1 xfsdump.
*/
-#define GLOBAL_HDR_VERSION GLOBAL_HDR_VERSION_4
+#define GLOBAL_HDR_VERSION GLOBAL_HDR_VERSION_3

#define GLOBAL_HDR_STRING_SZ 0x100
#define GLOBAL_HDR_TIME_SZ 4
diff --git a/dump/content.c b/dump/content.c
index 9ed8459..94ca787 100644
--- a/dump/content.c
+++ b/dump/content.c
@@ -791,6 +791,15 @@ content_init( intgen_t argc,
srcname );
return BOOL_FALSE;
}
+
+ /* If 32 bit project IDs are in use, bump the header version */
+ if ((fsflags & XFS_FSOP_GEOM_FLAGS_PROJID32) &&
+ gwhdrtemplatep->gh_version < GLOBAL_HDR_VERSION_4) {
+ mlog( MLOG_NORMAL | MLOG_NOTE, _(
+ "32bit project ids in use, bumping to dump version 4\n"));
+ gwhdrtemplatep->gh_version = GLOBAL_HDR_VERSION_4;
+ }
+
/* place the fs info in the write hdr template
*/
( void )strncpyterm( cwhdrtemplatep->ch_mntpnt,