Add an option to the btrfs tool to use the ioctl for cancelling balance operations.
SIgned-off-by: Hugo Mills <h...@carfax.org.uk> --- btrfs.c | 4 ++++ btrfs_cmds.c | 41 +++++++++++++++++++++++++++++++++++++++++ btrfs_cmds.h | 1 + ioctl.h | 1 + 4 files changed, 47 insertions(+) Index: btrfs-progs-unstable/btrfs.c =================================================================== --- btrfs-progs-unstable.orig/btrfs.c 2010-10-30 00:19:59.968416575 +0100 +++ btrfs-progs-unstable/btrfs.c 2010-10-30 00:20:38.446849736 +0100 @@ -99,6 +99,10 @@ "balance progress", "<path>\n" "Show progress of the balance operation running on <path>." }, + { do_balance_cancel, 1, + "balance cancel", "<path>\n" + "Cancel the balance operation running on <path>." + }, { do_scan, 999, "device scan", "[<device> [<device>..]\n" "Scan all device for or the passed device for a btrfs\n" Index: btrfs-progs-unstable/btrfs_cmds.c =================================================================== --- btrfs-progs-unstable.orig/btrfs_cmds.c 2010-10-30 00:04:48.335524683 +0100 +++ btrfs-progs-unstable/btrfs_cmds.c 2010-10-30 00:20:22.267508562 +0100 @@ -848,6 +848,47 @@ return 0; } +int do_balance_cancel(int nargs, char **argv) +{ + char *path = argv[1]; + int fdmnt; + int ret = 0; + int err = 0; + + fdmnt = open_file_or_dir(path); + if(fdmnt < 0) { + fprintf(stderr, "ERROR: can't access '%s'\n", path); + return 12; + } + + ret = ioctl(fdmnt, BTRFS_IOC_BALANCE_CANCEL, NULL); + err = errno; + + if(ret) { + switch(err) { + case 0: + break; + case EINVAL: + fprintf(stderr, "ERROR: no balance in progress.\n"); + err = 20; + break; + case ECANCELED: + fprintf(stderr, "ERROR: operation already cancelled.\n"); + err = 21; + break; + default: + fprintf(stderr, "ERROR: ioctl returned error '%d'.\n", + err); + err = 22; + break; + } + } + + close(fdmnt); + + return err; +} + int do_remove_volume(int nargs, char **args) { Index: btrfs-progs-unstable/btrfs_cmds.h =================================================================== --- btrfs-progs-unstable.orig/btrfs_cmds.h 2010-10-30 00:04:48.335524683 +0100 +++ btrfs-progs-unstable/btrfs_cmds.h 2010-10-30 00:20:22.307506934 +0100 @@ -24,6 +24,7 @@ int do_add_volume(int nargs, char **args); int do_balance(int nargs, char **argv); int do_balance_progress(int nargs, char **argv); +int do_balance_cancel(int nargs, char **argv); int do_remove_volume(int nargs, char **args); int do_scan(int nargs, char **argv); int do_resize(int nargs, char **argv); Index: btrfs-progs-unstable/ioctl.h =================================================================== --- btrfs-progs-unstable.orig/ioctl.h 2010-10-30 00:04:48.325525089 +0100 +++ btrfs-progs-unstable/ioctl.h 2010-10-30 00:20:22.357504895 +0100 @@ -176,4 +176,5 @@ struct btrfs_ioctl_space_args) #define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 21, \ struct btrfs_ioctl_balance_progress) +#define BTRFS_IOC_BALANCE_CANCEL _IO(BTRFS_IOCTL_MAGIC, 22) #endif -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html