[PATCH v1] xfs_spaceman: add fsuuid command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add support for the fsuuid command to retrieve the UUID of a mounted
filesystem.

Signed-off-by: Catherine Hoang <catherine.hoang@xxxxxxxxxx>
---
 spaceman/Makefile |  4 +--
 spaceman/fsuuid.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++
 spaceman/init.c   |  1 +
 spaceman/space.h  |  1 +
 4 files changed, 67 insertions(+), 2 deletions(-)
 create mode 100644 spaceman/fsuuid.c

diff --git a/spaceman/Makefile b/spaceman/Makefile
index 1f048d54..901e4e6d 100644
--- a/spaceman/Makefile
+++ b/spaceman/Makefile
@@ -7,10 +7,10 @@ include $(TOPDIR)/include/builddefs
 
 LTCOMMAND = xfs_spaceman
 HFILES = init.h space.h
-CFILES = info.c init.c file.c health.c prealloc.c trim.c
+CFILES = info.c init.c file.c health.c prealloc.c trim.c fsuuid.c
 LSRCFILES = xfs_info.sh
 
-LLDLIBS = $(LIBXCMD) $(LIBFROG)
+LLDLIBS = $(LIBXCMD) $(LIBFROG) $(LIBUUID)
 LTDEPENDENCIES = $(LIBXCMD) $(LIBFROG)
 LLDFLAGS = -static
 
diff --git a/spaceman/fsuuid.c b/spaceman/fsuuid.c
new file mode 100644
index 00000000..be12c1ad
--- /dev/null
+++ b/spaceman/fsuuid.c
@@ -0,0 +1,63 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2022 Oracle.
+ * All Rights Reserved.
+ */
+
+#include "libxfs.h"
+#include "libfrog/fsgeom.h"
+#include "libfrog/paths.h"
+#include "command.h"
+#include "init.h"
+#include "space.h"
+#include <sys/ioctl.h>
+
+#ifndef FS_IOC_GETFSUUID
+#define FS_IOC_GETFSUUID	_IOR('f', 44, struct fsuuid)
+#define UUID_SIZE 16
+struct fsuuid {
+    __u32   fsu_len;
+    __u32   fsu_flags;
+    __u8    fsu_uuid[];
+};
+#endif
+
+static cmdinfo_t fsuuid_cmd;
+
+static int
+fsuuid_f(
+	int		argc,
+	char		**argv)
+{
+	struct fsuuid	fsuuid;
+	int		error;
+	char		bp[40];
+
+	fsuuid.fsu_len = UUID_SIZE;
+	fsuuid.fsu_flags = 0;
+
+	error = ioctl(file->xfd.fd, FS_IOC_GETFSUUID, &fsuuid);
+
+	if (error) {
+		perror("fsuuid");
+		exitcode = 1;
+	} else {
+		platform_uuid_unparse((uuid_t *)fsuuid.fsu_uuid, bp);
+		printf("UUID = %s\n", bp);
+	}
+
+	return 0;
+}
+
+void
+fsuuid_init(void)
+{
+	fsuuid_cmd.name = "fsuuid";
+	fsuuid_cmd.cfunc = fsuuid_f;
+	fsuuid_cmd.argmin = 0;
+	fsuuid_cmd.argmax = 0;
+	fsuuid_cmd.flags = CMD_FLAG_ONESHOT;
+	fsuuid_cmd.oneline = _("get mounted filesystem UUID");
+
+	add_command(&fsuuid_cmd);
+}
diff --git a/spaceman/init.c b/spaceman/init.c
index cf1ff3cb..efe1bf9b 100644
--- a/spaceman/init.c
+++ b/spaceman/init.c
@@ -35,6 +35,7 @@ init_commands(void)
 	trim_init();
 	freesp_init();
 	health_init();
+	fsuuid_init();
 }
 
 static int
diff --git a/spaceman/space.h b/spaceman/space.h
index 723209ed..dcbdca08 100644
--- a/spaceman/space.h
+++ b/spaceman/space.h
@@ -33,5 +33,6 @@ extern void	freesp_init(void);
 #endif
 extern void	info_init(void);
 extern void	health_init(void);
+extern void	fsuuid_init(void);
 
 #endif /* XFS_SPACEMAN_SPACE_H_ */
-- 
2.25.1




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux