X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=bcachefs.c;h=7ca79adab7108612d7b9825ccfa3099db5d72b01;hb=249bf7b9d446092e1b744c366b7e8c4563a437f0;hp=239b114723831cb630d837c95bcf36f6e58b9cb9;hpb=617535ce856b671a0b8b3d168e39a53796a01a57;p=bcachefs-tools-debian diff --git a/bcachefs.c b/bcachefs.c index 239b114..7ca79ad 100644 --- a/bcachefs.c +++ b/bcachefs.c @@ -33,18 +33,25 @@ static void usage(void) "Superblock commands:\n" " format Format a new filesystem\n" " show-super Dump superblock information to stdout\n" + " set-option Set a filesystem option\n" + " reset-counters Reset all counters on an unmounted device\n" "\n" +#ifndef BCACHEFS_NO_RUST + "Mount:\n" + " mount Mount a filesystem\n" + "\n" +#endif "Repair:\n" " fsck Check an existing filesystem for errors\n" "\n" - "Startup/shutdown, assembly of multi device filesystems:\n" #if 0 + "Startup/shutdown, assembly of multi device filesystems:\n" " assemble Assemble an existing multi device filesystem\n" " incremental Incrementally assemble an existing multi device filesystem\n" " run Start a partially assembled filesystem\n" " stop Stop a running filesystem\n" -#endif "\n" +#endif "Commands for managing a running filesystem:\n" " fs usage Show disk usage\n" "\n" @@ -56,7 +63,12 @@ static void usage(void) " device evacuate Migrate data off of a specific device\n" " device set-state Mark a device as failed\n" " device resize Resize filesystem on a device\n" - " device journal-resize Resize journal on a device\n" + " device resize-journal Resize journal on a device\n" + "\n" + "Commands for managing subvolumes and snapshots:\n" + " subvolume create Create a new subvolume\n" + " subvolume delete Delete an existing subvolume\n" + " subvolume snapshot Create a snapshot\n" "\n" "Commands for managing filesystem data:\n" " data rereplicate Rereplicate degraded data\n" @@ -73,31 +85,33 @@ static void usage(void) "\n" "Commands for operating on files in a bcachefs filesystem:\n" " setattr Set various per file attributes\n" + "\n" "Debug:\n" "These commands work on offline, unmounted filesystems\n" " dump Dump filesystem metadata to a qcow2 image\n" +#ifndef BCACHEFS_NO_RUST " list List filesystem metadata in textual form\n" +#endif " list_journal List contents of journal\n" "\n" + "FUSE:\n" + " fusemount Mount a filesystem via FUSE\n" + "\n" "Miscellaneous:\n" +#ifndef BCACHEFS_NO_RUST + " completions Generate shell completions\n" +#endif " version Display the version of the invoked bcachefs tool\n"); } -static char *full_cmd; - static char *pop_cmd(int *argc, char *argv[]) { - if (*argc < 2) { - printf("%s: missing command\n", argv[0]); - usage(); - exit(EXIT_FAILURE); - } - char *cmd = argv[1]; - memmove(&argv[1], &argv[2], *argc * sizeof(argv[0])); + if (!(*argc < 2)) + memmove(&argv[1], &argv[2], (*argc - 2) * sizeof(argv[0])); (*argc)--; + argv[*argc] = NULL; - full_cmd = mprintf("%s %s", full_cmd, cmd); return cmd; } @@ -105,10 +119,13 @@ static int fs_cmds(int argc, char *argv[]) { char *cmd = pop_cmd(&argc, argv); + if (argc < 1) { + usage(); + exit(EXIT_FAILURE); + } if (!strcmp(cmd, "usage")) return cmd_fs_usage(argc, argv); - usage(); return 0; } @@ -116,6 +133,8 @@ static int device_cmds(int argc, char *argv[]) { char *cmd = pop_cmd(&argc, argv); + if (argc < 1) + return device_usage(); if (!strcmp(cmd, "add")) return cmd_device_add(argc, argv); if (!strcmp(cmd, "remove")) @@ -133,7 +152,6 @@ static int device_cmds(int argc, char *argv[]) if (!strcmp(cmd, "resize-journal")) return cmd_device_resize_journal(argc, argv); - usage(); return 0; } @@ -141,12 +159,28 @@ static int data_cmds(int argc, char *argv[]) { char *cmd = pop_cmd(&argc, argv); + if (argc < 1) + return data_usage(); if (!strcmp(cmd, "rereplicate")) return cmd_data_rereplicate(argc, argv); if (!strcmp(cmd, "job")) return cmd_data_job(argc, argv); - usage(); + return 0; +} + +static int subvolume_cmds(int argc, char *argv[]) +{ + char *cmd = pop_cmd(&argc, argv); + if (argc < 1) + return subvolume_usage(); + if (!strcmp(cmd, "create")) + return cmd_subvolume_create(argc, argv); + if (!strcmp(cmd, "delete")) + return cmd_subvolume_delete(argc, argv); + if (!strcmp(cmd, "snapshot")) + return cmd_subvolume_snapshot(argc, argv); + return 0; } @@ -154,21 +188,55 @@ int main(int argc, char *argv[]) { raid_init(); - full_cmd = argv[0]; + char *full_cmd = argv[0]; + + /* Are we being called via a symlink? */ + + if (strstr(full_cmd, "mkfs")) + return cmd_format(argc, argv); + + if (strstr(full_cmd, "fsck")) + return cmd_fsck(argc, argv); + +#ifdef BCACHEFS_FUSE + if (strstr(full_cmd, "mount.fuse")) + return cmd_fusemount(argc, argv); +#endif + +#ifndef BCACHEFS_NO_RUST + if (strstr(full_cmd, "mount")) + return rust_main(argc, argv, "mount"); +#endif setvbuf(stdout, NULL, _IOLBF, 0); char *cmd = pop_cmd(&argc, argv); + if (!cmd) { + puts("missing command\n"); + goto usage; + } - if (!strcmp(cmd, "version")) - return cmd_version(argc, argv); + /* these subcommands display usage when argc < 2 */ + if (!strcmp(cmd, "device")) + return device_cmds(argc, argv); + if (!strcmp(cmd, "fs")) + return fs_cmds(argc, argv); + if (!strcmp(cmd, "data")) + return data_cmds(argc, argv); + if (!strcmp(cmd, "subvolume")) + return subvolume_cmds(argc, argv); if (!strcmp(cmd, "format")) return cmd_format(argc, argv); - if (!strcmp(cmd, "show-super")) - return cmd_show_super(argc, argv); - if (!strcmp(cmd, "fsck")) return cmd_fsck(argc, argv); + if (!strcmp(cmd, "version")) + return cmd_version(argc, argv); + if (!strcmp(cmd, "show-super")) + return cmd_show_super(argc, argv); + if (!strcmp(cmd, "set-option")) + return cmd_set_option(argc, argv); + if (!strcmp(cmd, "reset-counters")) + return cmd_reset_counters(argc, argv); #if 0 if (!strcmp(cmd, "assemble")) @@ -181,15 +249,6 @@ int main(int argc, char *argv[]) return cmd_stop(argc, argv); #endif - if (!strcmp(cmd, "fs")) - return fs_cmds(argc, argv); - - if (!strcmp(cmd, "device")) - return device_cmds(argc, argv); - - if (!strcmp(cmd, "data")) - return data_cmds(argc, argv); - if (!strcmp(cmd, "unlock")) return cmd_unlock(argc, argv); if (!strcmp(cmd, "set-passphrase")) @@ -204,13 +263,19 @@ int main(int argc, char *argv[]) if (!strcmp(cmd, "dump")) return cmd_dump(argc, argv); - if (!strcmp(cmd, "list")) - return cmd_list(argc, argv); if (!strcmp(cmd, "list_journal")) return cmd_list_journal(argc, argv); + if (!strcmp(cmd, "kill_btree_node")) + return cmd_kill_btree_node(argc, argv); if (!strcmp(cmd, "setattr")) return cmd_setattr(argc, argv); +#ifndef BCACHEFS_NO_RUST + if (!strcmp(cmd, "list") || + !strcmp(cmd, "mount") || + !strcmp(cmd, "completions")) + return rust_main(argc, argv, cmd); +#endif #ifdef BCACHEFS_FUSE if (!strcmp(cmd, "fusemount")) @@ -223,6 +288,7 @@ int main(int argc, char *argv[]) } printf("Unknown command %s\n", cmd); +usage: usage(); exit(EXIT_FAILURE); }