Implement an easy way to check a filesystem for the existence of 64bit inodes.
Based on XFS_IOC_FSINUMBERS, and starting with a lastip of XFS_MAXINUMBER_32, it
returns a string saying if there is or there isn't 64bit inodes in the
filesystem.
Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
---
io/open.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/io/open.c b/io/open.c
index ac5a5e0..b25b09d 100644
--- a/io/open.c
+++ b/io/open.c
@@ -20,6 +20,7 @@
#include "input.h"
#include "init.h"
#include "io.h"
+#include "libxfs.h"
#ifndef __O_TMPFILE
#if defined __alpha__
@@ -44,6 +45,7 @@ static cmdinfo_t statfs_cmd;
static cmdinfo_t chproj_cmd;
static cmdinfo_t lsproj_cmd;
static cmdinfo_t extsize_cmd;
+static cmdinfo_t inodes64_cmd;
static prid_t prid;
static long extsize;
@@ -750,6 +752,36 @@ statfs_f(
return 0;
}
+static int
+inodes64_f(
+ int argc,
+ char **argv)
+{
+ int i;
+ __s32 count;
+ __u64 last = XFS_MAXINUMBER_32;
+ xfs_inogrp_t igroup;
+ xfs_fsop_bulkreq_t bulkreq;
+
+ bulkreq.lastip = &last;
+ bulkreq.icount = 1;
+ bulkreq.ubuffer = &igroup;
+ bulkreq.ocount = &count;
+
+ if (!xfsctl(file->name, file->fd, XFS_IOC_FSINUMBERS, &bulkreq)) {
+ if (count > 0) {
+ printf("Filesystem does have 64bit inodes\n");
+ return 0;
+ } else {
+ printf("Filesystem does not have 64bit inodes\n");
+ return 0;
+ }
+ }
+ perror("xfsctl(XFS_IOC_FSINUMBERS)");
+ exitcode = 1;
+ return 0;
+}
+
void
open_init(void)
{
@@ -815,6 +847,12 @@ open_init(void)
_("get/set preferred extent size (in bytes) for the open file");
extsize_cmd.help = extsize_help;
+ inodes64_cmd.name = "inodes64";
+ inodes64_cmd.cfunc = inodes64_f;
+ inodes64_cmd.flags = CMD_NOMAP_OK;
+ inodes64_cmd.oneline =
+ _("Checks if filesyste contais 64bit inodes");
+
add_command(&open_cmd);
add_command(&stat_cmd);
add_command(&close_cmd);
@@ -822,4 +860,5 @@ open_init(void)
add_command(&chproj_cmd);
add_command(&lsproj_cmd);
add_command(&extsize_cmd);
+ add_command(&inodes64_cmd);
}
--
2.4.3
|