From f5baaf48e3e82b1caf9f5cd1207d4d6feba3a2e5 Mon Sep 17 00:00:00 2001 From: Thomas Bertschinger Date: Mon, 15 Jan 2024 23:41:02 -0700 Subject: move Rust sources to top level, C sources into c_src This moves the Rust sources out of rust_src/ and into the top level. Running the bcachefs executable out of the development tree is now: $ ./target/release/bcachefs command or $ cargo run --profile release -- command instead of "./bcachefs command". Building and installing is still: $ make && make install Signed-off-by: Thomas Bertschinger Signed-off-by: Kent Overstreet --- c_src/bcachefs.c | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 c_src/bcachefs.c (limited to 'c_src/bcachefs.c') diff --git a/c_src/bcachefs.c b/c_src/bcachefs.c new file mode 100644 index 00000000..70af2c39 --- /dev/null +++ b/c_src/bcachefs.c @@ -0,0 +1,179 @@ +/* + * Authors: Kent Overstreet + * Gabriel de Perthuis + * Jacob Malevich + * + * GPLv2 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "cmds.h" + +void bcachefs_usage(void) +{ + puts("bcachefs - tool for managing bcachefs filesystems\n" + "usage: bcachefs []\n" + "\n" + "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" + "Mount:\n" + " mount Mount a filesystem\n" + "\n" + "Repair:\n" + " fsck Check an existing filesystem for errors\n" + "\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" + "\n" +#endif + "Commands for managing a running filesystem:\n" + " fs usage Show disk usage\n" + "\n" + "Commands for managing devices within a running filesystem:\n" + " device add Add a new device to an existing filesystem\n" + " device remove Remove a device from an existing filesystem\n" + " device online Re-add an existing member to a filesystem\n" + " device offline Take a device offline, without removing it\n" + " 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 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" + " data job Kick off low level data jobs\n" + "\n" + "Encryption:\n" + " unlock Unlock an encrypted filesystem prior to running/mounting\n" + " set-passphrase Change passphrase on an existing (unmounted) filesystem\n" + " remove-passphrase Remove passphrase on an existing (unmounted) filesystem\n" + "\n" + "Migrate:\n" + " migrate Migrate an existing filesystem to bcachefs, in place\n" + " migrate-superblock Add default superblock, after bcachefs migrate\n" + "\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" + " list List filesystem metadata in textual form\n" + " list_journal List contents of journal\n" + "\n" + "FUSE:\n" + " fusemount Mount a filesystem via FUSE\n" + "\n" + "Miscellaneous:\n" + " completions Generate shell completions\n" + " version Display the version of the invoked bcachefs tool\n"); +} + +static char *pop_cmd(int *argc, char *argv[]) +{ + char *cmd = argv[1]; + if (!(*argc < 2)) + memmove(&argv[1], &argv[2], (*argc - 2) * sizeof(argv[0])); + (*argc)--; + argv[*argc] = NULL; + + return cmd; +} + +int fs_cmds(int argc, char *argv[]) +{ + char *cmd = pop_cmd(&argc, argv); + + if (argc < 1) { + bcachefs_usage(); + exit(EXIT_FAILURE); + } + if (!strcmp(cmd, "usage")) + return cmd_fs_usage(argc, argv); + + return 0; +} + +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")) + return cmd_device_remove(argc, argv); + if (!strcmp(cmd, "online")) + return cmd_device_online(argc, argv); + if (!strcmp(cmd, "offline")) + return cmd_device_offline(argc, argv); + if (!strcmp(cmd, "evacuate")) + return cmd_device_evacuate(argc, argv); + if (!strcmp(cmd, "set-state")) + return cmd_device_set_state(argc, argv); + if (!strcmp(cmd, "resize")) + return cmd_device_resize(argc, argv); + if (!strcmp(cmd, "resize-journal")) + return cmd_device_resize_journal(argc, argv); + + return 0; +} + +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); + + return 0; +} + +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; +} -- cgit v1.2.3