diff options
author | Ilya Dryomov <ilya.dryomov@inktank.com> | 2014-03-19 16:58:36 +0200 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2014-04-04 21:07:23 -0700 |
commit | 48a163dbb517eba13643bf404a0d695c1ab0a60d (patch) | |
tree | f935878dc2fe37083044356cc79ede2f14bea764 /lib/usercopy.c | |
parent | cc48c3e85f7fc48092f2e9874f1a07dd997d9184 (diff) | |
download | linux-48a163dbb517eba13643bf404a0d695c1ab0a60d.tar.bz2 |
crush: fix off-by-one errors in total_tries refactor
Back in 27f4d1f6bc32c2ed7b2c5080cbd58b14df622607 we refactored the CRUSH
code to allow adjustment of the retry counts on a per-pool basis. That
commit had an off-by-one bug: the previous "tries" counter was a *retry*
count, not a *try* count, but the new code was passing in 1 meaning
there should be no retries.
Fix the ftotal vs tries comparison to use < instead of <= to fix the
problem. Note that the original code used <= here, which means the
global "choose_total_tries" tunable is actually counting retries.
Compensate for that by adding 1 in crush_do_rule when we pull the tunable
into the local variable.
This was noticed looking at output from a user provided osdmap.
Unfortunately the map doesn't illustrate the change in mapping behavior
and I haven't managed to construct one yet that does. Inspection of the
crush debug output now aligns with prior versions, though.
Reflects ceph.git commit 795704fd615f0b008dcc81aa088a859b2d075138.
Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'lib/usercopy.c')
0 files changed, 0 insertions, 0 deletions