bcacheadm unregister devices

uses unregister ioctl to unregister a cacheset that the device
belongs to

Change-Id: I01772de3471888c4951f050b3e92f41b58c5d103
Signed-off-by: Jacob Malevich <jam@daterainc.com>
This commit is contained in:
Jacob Malevich 2014-11-21 14:42:07 -08:00
parent 6ad19a812b
commit 7a80b660c2
3 changed files with 42 additions and 5 deletions

View File

@ -1070,15 +1070,21 @@ int list_cachesets(char *cset_dir, bool list_devs)
return 0; return 0;
} }
int register_bcache(char *devs) static int get_bcache_fd()
{ {
int ret, bcachefd; int bcachefd = open("/dev/bcache", O_RDWR);
bcachefd = open("/dev/bcache", O_RDWR);
if (bcachefd < 0) { if (bcachefd < 0) {
perror("Can't open bcache device\n"); perror("Can't open bcache device\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
return bcachefd;
}
int register_bcache(char *const *devs)
{
int ret, bcachefd;
bcachefd = get_bcache_fd();
ret = ioctl(bcachefd, BCH_IOCTL_REGISTER, devs); ret = ioctl(bcachefd, BCH_IOCTL_REGISTER, devs);
if (ret < 0) { if (ret < 0) {
@ -1086,7 +1092,20 @@ int register_bcache(char *devs)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
return 0; return 0;
}
int unregister_bcache(char *const *devs)
{
int ret, bcachefd;
bcachefd = get_bcache_fd();
ret = ioctl(bcachefd, BCH_IOCTL_UNREGISTER, devs);
if (ret < 0) {
fprintf(stderr, "ioctl unregister error: %s\n", strerror(ret));
exit(EXIT_FAILURE);
}
return 0;
} }
int probe(char *dev, int udev) int probe(char *dev, int udev)

View File

@ -60,11 +60,14 @@ void show_super_cache(struct cache_sb *, bool);
struct cache_sb *query_dev(char *, bool, bool, bool, char *dev_uuid); struct cache_sb *query_dev(char *, bool, bool, bool, char *dev_uuid);
int list_cachesets(char *, bool); int list_cachesets(char *, bool);
char *parse_array_to_list(char *const *); char *parse_array_to_list(char *const *);
int register_bcache(); int register_bcache(char *const *);
int unregister_bcache(char *const *);
int probe(char *, int); int probe(char *, int);
void sb_state(struct cache_sb *, char *); void sb_state(struct cache_sb *, char *);
void read_stat_dir(DIR *, char *, char *, bool); void read_stat_dir(DIR *, char *, char *, bool);
void find_matching_uuid(char *, char *, const char*); void find_matching_uuid(char *, char *, const char*);
//int add_device(char *);
//int remove_device(char *);
#define csum_set(i, type) \ #define csum_set(i, type) \
({ \ ({ \

View File

@ -199,6 +199,10 @@ static NihOption bcache_register_options[] = {
NIH_OPTION_LAST NIH_OPTION_LAST
}; };
static NihOption bcache_unregister_options[] = {
NIH_OPTION_LAST
};
static NihOption query_devs_options[] = { static NihOption query_devs_options[] = {
{'f', "force_csum", N_("force_csum"), NULL, NULL, &force_csum, NULL}, {'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}, {'u', "uuid-only", N_("only print out the uuid for the devices, not the whole superblock"), NULL, NULL, &uuid_only, NULL},
@ -356,6 +360,13 @@ int bcache_register (NihCommand *command, char *const *args)
return ret; return ret;
} }
int bcache_unregister (NihCommand *command, char *const *args)
{
int ret = unregister_bcache(args);
return ret;
}
int bcache_list_cachesets (NihCommand *command, char *const *args) int bcache_list_cachesets (NihCommand *command, char *const *args)
{ {
return list_cachesets(cset_dir, list_devs); return list_cachesets(cset_dir, list_devs);
@ -470,6 +481,10 @@ static NihCommand commands[] = {
"Registers a list of devices", "Registers a list of devices",
N_("Registers a list of devices"), N_("Registers a list of devices"),
NULL, bcache_register_options, bcache_register}, NULL, bcache_register_options, bcache_register},
{"unregister", N_("unregister <list of devices>"),
"Unregisters a list of devices",
N_("Unregisters a list of devices"),
NULL, bcache_unregister_options, bcache_unregister},
{"list-cachesets", N_("list-cachesets"), {"list-cachesets", N_("list-cachesets"),
"Lists cachesets in /sys/fs/bcache", "Lists cachesets in /sys/fs/bcache",
N_("Lists cachesets in /sys/fs/bcache"), N_("Lists cachesets in /sys/fs/bcache"),