mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-09 00:00:04 +03:00
bcacheadm: add-devs and rm-dev options
Option to add multiple devices and remove single devices. bcacheadm add-devs --set=uuid <list of devices> bcacheadm rm-dev <dev> Change-Id: I4f0a287c02dfad76d8263554e455c408191ea7ba Signed-off-by: Jacob Malevich <jam@daterainc.com>
This commit is contained in:
parent
7916b2eb3b
commit
b375ed9755
57
bcache.c
57
bcache.c
@ -879,6 +879,7 @@ struct cache_sb *query_dev(char *dev, bool force_csum,
|
||||
printf("Can't open dev %s: %s\n", dev, strerror(errno));
|
||||
exit(2);
|
||||
}
|
||||
printf("opened sb for %s\n", dev);
|
||||
|
||||
if (pread(fd, sb, bytes, SB_START) != bytes) {
|
||||
fprintf(stderr, "Couldn't read\n");
|
||||
@ -1117,6 +1118,62 @@ err:
|
||||
return err;
|
||||
}
|
||||
|
||||
char *add_devices(char *const *devs, char *uuid)
|
||||
{
|
||||
int ret, bcachefd;
|
||||
char *err = NULL;
|
||||
|
||||
bcachefd = open("/dev/bcache", O_RDWR);
|
||||
if (bcachefd < 0) {
|
||||
err = "Can't open bcache device";
|
||||
goto err;
|
||||
}
|
||||
|
||||
struct bch_ioctl_add_disks ia;
|
||||
ia.devs = devs;
|
||||
ia.uuid = uuid;
|
||||
|
||||
ret = ioctl(bcachefd, BCH_IOCTL_ADD_DISKS, &ia);
|
||||
if (ret < 0) {
|
||||
char tmp[128];
|
||||
snprintf(tmp, 128, "ioctl add disk error: %s\n",
|
||||
strerror(ret));
|
||||
err = strdup(tmp);
|
||||
}
|
||||
|
||||
err:
|
||||
close(bcachefd);
|
||||
return err;
|
||||
}
|
||||
|
||||
char *remove_device(const char *dev, bool force)
|
||||
{
|
||||
int ret, bcachefd;
|
||||
char *err = NULL;
|
||||
|
||||
bcachefd = open("/dev/bcache", O_RDWR);
|
||||
if (bcachefd < 0) {
|
||||
err = "Can't open bcache device";
|
||||
goto err;
|
||||
}
|
||||
|
||||
struct bch_ioctl_rm_disk ir;
|
||||
ir.dev = dev;
|
||||
ir.force = force ? 1 : 0;
|
||||
|
||||
ret = ioctl(bcachefd, BCH_IOCTL_RM_DISK, &ir);
|
||||
if (ret < 0) {
|
||||
char tmp[128];
|
||||
snprintf(tmp, 128, "ioctl add disk error: %s\n",
|
||||
strerror(ret));
|
||||
err = strdup(tmp);
|
||||
}
|
||||
|
||||
err:
|
||||
close(bcachefd);
|
||||
return err;
|
||||
}
|
||||
|
||||
char *probe(char *dev, int udev)
|
||||
{
|
||||
struct cache_sb sb;
|
||||
|
9
bcache.h
9
bcache.h
@ -30,6 +30,11 @@ typedef __s64 s64;
|
||||
(void) (&_max1 == &_max2); \
|
||||
_max1 > _max2 ? _max1 : _max2; })
|
||||
|
||||
struct add_msg {
|
||||
char *const *devs;
|
||||
char *uuid;
|
||||
int tier;
|
||||
};
|
||||
|
||||
extern const char * const cache_state[];
|
||||
extern const char * const replacement_policies[];
|
||||
@ -67,8 +72,8 @@ char *probe(char *, int);
|
||||
void sb_state(struct cache_sb *, char *);
|
||||
char *read_stat_dir(DIR *, char *, char *, bool);
|
||||
char *find_matching_uuid(char *, char *, const char*);
|
||||
//int add_device(char *);
|
||||
//int remove_device(char *);
|
||||
char *add_devices(char *const *, char *);
|
||||
char *remove_device(const char *, bool);
|
||||
|
||||
#define csum_set(i, type) \
|
||||
({ \
|
||||
|
52
bcacheadm.c
52
bcacheadm.c
@ -76,6 +76,11 @@ char *metadata_replicas = 0;
|
||||
char *data_replicas = 0;
|
||||
char *tier = 0;
|
||||
|
||||
/* add-dev globals */
|
||||
char *add_dev_uuid = NULL;
|
||||
|
||||
/* rm-dev globals */
|
||||
bool force_remove = false;
|
||||
|
||||
/* query-dev globals */
|
||||
bool force_csum = false;
|
||||
@ -203,6 +208,16 @@ static NihOption bcache_unregister_options[] = {
|
||||
NIH_OPTION_LAST
|
||||
};
|
||||
|
||||
static NihOption bcache_add_device_options[] = {
|
||||
{'u', "set", N_("cacheset uuid"), NULL, "UUID", &add_dev_uuid, NULL},
|
||||
NIH_OPTION_LAST
|
||||
};
|
||||
|
||||
static NihOption bcache_rm_device_options[] = {
|
||||
{'f', "force", N_("force cache removal"), NULL, NULL, &force_remove, NULL},
|
||||
NIH_OPTION_LAST
|
||||
};
|
||||
|
||||
static NihOption query_devs_options[] = {
|
||||
{'f', "force_csum", N_("force_csum"), NULL, NULL, &force_csum, NULL},
|
||||
{'u', "uuid-only", N_("only print out the uuid for the devices, not the whole superblock"), NULL, NULL, &uuid_only, NULL},
|
||||
@ -384,6 +399,35 @@ int bcache_unregister(NihCommand *command, char *const *args)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcache_add_devices(NihCommand *command, char *const *args)
|
||||
{
|
||||
char *err;
|
||||
|
||||
if (!add_dev_uuid)
|
||||
printf("Must specify a cacheset uuid to add the disk to\n");
|
||||
|
||||
err = add_devices(args, add_dev_uuid);
|
||||
if (err) {
|
||||
printf("bcache_add_devices error: %s\n", err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcache_rm_device(NihCommand *command, char *const *args)
|
||||
{
|
||||
char *err;
|
||||
|
||||
err = remove_device(args[0], force_remove);
|
||||
if (err) {
|
||||
printf("bcache_rm_devices error: %s\n", err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcache_list_cachesets(NihCommand *command, char *const *args)
|
||||
{
|
||||
char *err = NULL;
|
||||
@ -536,6 +580,14 @@ static NihCommand commands[] = {
|
||||
"Unregisters a list of devices",
|
||||
N_("Unregisters a list of devices"),
|
||||
NULL, bcache_unregister_options, bcache_unregister},
|
||||
{"add-devs", N_("add-devs --set=UUID --tier=# <list of devices>"),
|
||||
"Adds a list of devices to a cacheset",
|
||||
N_("Adds a list of devices to a cacheset"),
|
||||
NULL, bcache_add_device_options, bcache_add_devices},
|
||||
{"rm-dev", N_("rm-dev <dev>"),
|
||||
"Removes a device from its cacheset",
|
||||
N_("Removes a device from its cacheset"),
|
||||
NULL, bcache_rm_device_options, bcache_rm_device},
|
||||
{"list-cachesets", N_("list-cachesets"),
|
||||
"Lists cachesets in /sys/fs/bcache",
|
||||
N_("Lists cachesets in /sys/fs/bcache"),
|
||||
|
Loading…
Reference in New Issue
Block a user