return -ENOENT;
}
int root = crush.get_item_id(rule_root);
+ if (rule_device_class.size()) {
+ if (!crush.class_exists(rule_device_class)) {
+ *ss << "device class " << rule_device_class << " does not exist";
+ return -ENOENT;
+ }
+ int c = crush.get_class_id(rule_device_class);
+ if (crush.class_bucket.count(root) == 0 ||
+ crush.class_bucket[root].count(c) == 0) {
+ *ss << "root item " << rule_root << " has no devices with class "
+ << rule_device_class;
+ return -EINVAL;
+ }
+ root = crush.class_bucket[root][c];
+ }
int rule = 0;
int rno = 0;
err |= to_string("crush-root", profile,
&rule_root,
"default", ss);
+ err |= to_string("crush-device-class", profile,
+ &rule_device_class,
+ "", ss);
if (profile.count("crush-steps") != 0) {
rule_steps.clear();
unsigned int chunk_count;
unsigned int data_chunk_count;
std::string rule_root;
+ std::string rule_device_class;
struct Step {
Step(std::string _op, std::string _type, int _n) :
op(_op),