From 66c943be6caf033c2992c7e4cf99a35e0b1460c1 Mon Sep 17 00:00:00 2001
From: Integral <integral@archlinuxcn.org>
Date: Mon, 31 Mar 2025 20:00:32 +0800
Subject: [PATCH] bcachefs-tools: add fs_usage & return -EINVAL when no
 matching subcommand

Add the missing usage function for "fs" subcommand; when no matching
subcommand exists, print the usage and return -EINVAL.

Signed-off-by: Integral <integral@archlinuxcn.org>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
---
 c_src/bcachefs.c | 15 ++++++++-------
 c_src/cmd_fs.c   | 13 +++++++++++++
 c_src/cmds.h     |  1 +
 3 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/c_src/bcachefs.c b/c_src/bcachefs.c
index f2a1449e..2f718147 100644
--- a/c_src/bcachefs.c
+++ b/c_src/bcachefs.c
@@ -118,16 +118,15 @@ int fs_cmds(int argc, char *argv[])
 {
 	char *cmd = pop_cmd(&argc, argv);
 
-	if (argc < 1) {
-		bcachefs_usage();
-		exit(EXIT_FAILURE);
-	}
+	if (argc < 1)
+		return fs_usage();
 	if (!strcmp(cmd, "usage"))
 		return cmd_fs_usage(argc, argv);
 	if (!strcmp(cmd, "top"))
 		return cmd_fs_top(argc, argv);
 
-	return 0;
+	fs_usage();
+	return -EINVAL;
 }
 
 int device_cmds(int argc, char *argv[])
@@ -153,7 +152,8 @@ int device_cmds(int argc, char *argv[])
 	if (!strcmp(cmd, "resize-journal"))
 		return cmd_device_resize_journal(argc, argv);
 
-	return 0;
+	device_usage();
+	return -EINVAL;
 }
 
 int data_cmds(int argc, char *argv[])
@@ -169,5 +169,6 @@ int data_cmds(int argc, char *argv[])
 	if (!strcmp(cmd, "job"))
 		return cmd_data_job(argc, argv);
 
-	return 0;
+	data_usage();
+	return -EINVAL;
 }
diff --git a/c_src/cmd_fs.c b/c_src/cmd_fs.c
index 06f797b9..4ab3ec0d 100644
--- a/c_src/cmd_fs.c
+++ b/c_src/cmd_fs.c
@@ -491,6 +491,19 @@ devs:
 	bcache_fs_close(fs);
 }
 
+int fs_usage(void)
+{
+	puts("bcachefs fs - manage a running filesystem\n"
+	     "Usage: bcachefs fs <CMD> [OPTIONS]\n"
+	     "\n"
+	     "Commands:\n"
+	     "  usage                   Display detailed filesystem usage\n"
+	     "  top                     Show runtime performance information\n"
+	     "\n"
+	     "Report bugs to <linux-bcachefs@vger.kernel.org>");
+	return 0;
+}
+
 static void fs_usage_usage(void)
 {
 	puts("bcachefs fs usage - display detailed filesystem usage\n"
diff --git a/c_src/cmds.h b/c_src/cmds.h
index 9502d539..82f28af2 100644
--- a/c_src/cmds.h
+++ b/c_src/cmds.h
@@ -15,6 +15,7 @@ int cmd_recover_super(int argc, char *argv[]);
 int cmd_reset_counters(int argc, char *argv[]);
 int cmd_set_option(int argc, char *argv[]);
 
+int fs_usage(void);
 int cmd_fs_usage(int argc, char *argv[]);
 int cmd_fs_top(int argc, char *argv[]);