For firstn mode, if we fail to make a valid placement choice, we just
continue and return a short result to the caller. For indep mode, however,
we need to make the position stable, and return an undefined value on
failed placements to avoid shifting later results to the left.
Signed-off-by: Sage Weil <sage@inktank.com>
#define CRUSH_MAX_DEVICE_WEIGHT (100u * 0x10000u)
#define CRUSH_MAX_BUCKET_WEIGHT (65535u * 0x10000u)
+#define CRUSH_ITEM_UNDEF 0x7fffffff /* undefined result */
+
/*
* CRUSH uses user-defined "rules" to describe how inputs should be
* mapped to devices. A rule consists of sequence of steps to perform
} while (retry_descent);
if (skip_rep) {
- dprintk("skip rep\n");
- continue;
+ if (firstn) {
+ dprintk("skip rep\n");
+ continue;
+ }
+ dprintk("undef rep, continuing\n");
+ item = CRUSH_ITEM_UNDEF;
}
dprintk("CHOOSE got %d\n", item);