From 9db2e6b24cd24af8cce5625b1cd7727c9cb320c4 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 18 Dec 2023 12:58:15 -0800 Subject: [PATCH] crush: add choosemsr rule Signed-off-by: Samuel Just --- src/crush/CrushWrapper.h | 3 +++ src/crush/crush.h | 3 +++ src/crush/grammar.h | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h index 4425103ff6f..f71f6d6ea79 100644 --- a/src/crush/CrushWrapper.h +++ b/src/crush/CrushWrapper.h @@ -1208,6 +1208,9 @@ public: int set_rule_step_choose_leaf_indep(unsigned ruleno, unsigned step, int val, int type) { return set_rule_step(ruleno, step, CRUSH_RULE_CHOOSELEAF_INDEP, val, type); } + int set_rule_step_choose_msr(unsigned ruleno, unsigned step, int val, int type) { + return set_rule_step(ruleno, step, CRUSH_RULE_CHOOSE_MSR, val, type); + } int set_rule_step_emit(unsigned ruleno, unsigned step) { return set_rule_step(ruleno, step, CRUSH_RULE_EMIT, 0, 0); } diff --git a/src/crush/crush.h b/src/crush/crush.h index a2ec2e1de69..7c6ce7fdf45 100644 --- a/src/crush/crush.h +++ b/src/crush/crush.h @@ -69,6 +69,9 @@ enum crush_opcodes { CRUSH_RULE_SET_MSR_DESCENTS = 14, CRUSH_RULE_SET_MSR_COLLISION_TRIES = 15, + + /* choose variant without FIRSTN|INDEP */ + CRUSH_RULE_CHOOSE_MSR = 16 }; /* diff --git a/src/crush/grammar.h b/src/crush/grammar.h index 9e955091c6a..0c9a2da7d77 100644 --- a/src/crush/grammar.h +++ b/src/crush/grammar.h @@ -54,6 +54,7 @@ struct crush_grammar : public boost::spirit::grammar _step_set_msr_collision_tries, _step_choose, _step_chooseleaf, + _step_choose_msr, _step_emit, _step, _crushrule, @@ -97,6 +98,7 @@ struct crush_grammar : public boost::spirit::grammar boost::spirit::rule, boost::spirit::parser_tag<_step_set_msr_collision_tries> > step_set_msr_collision_tries; boost::spirit::rule, boost::spirit::parser_tag<_step_choose> > step_choose; boost::spirit::rule, boost::spirit::parser_tag<_step_chooseleaf> > step_chooseleaf; + boost::spirit::rule, boost::spirit::parser_tag<_step_choose_msr> > step_choose_msr; boost::spirit::rule, boost::spirit::parser_tag<_step_emit> > step_emit; boost::spirit::rule, boost::spirit::parser_tag<_step> > step; boost::spirit::rule, boost::spirit::parser_tag<_crushrule> > crushrule; @@ -163,6 +165,9 @@ struct crush_grammar : public boost::spirit::grammar >> ( str_p("indep") | str_p("firstn") ) >> integer >> str_p("type") >> name; + step_choose_msr = str_p("choosemsr") + >> integer + >> str_p("type") >> name; step_emit = str_p("emit"); step = str_p("step") >> ( step_take | step_set_choose_tries | @@ -175,6 +180,7 @@ struct crush_grammar : public boost::spirit::grammar step_set_msr_collision_tries | step_choose | step_chooseleaf | + step_choose_msr | step_emit ); crushrule = str_p("rule") >> !name >> '{' >> (str_p("id") | str_p("ruleset")) >> posint -- 2.39.5