From: Lionel Sambuc Date: Tue, 23 Jul 2013 15:49:11 +0000 (+0200) Subject: Revert "drivers/fbd/action.c: removed some 64-bit functions" X-Git-Tag: v3.3.0~883 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/zlib_tech.html?a=commitdiff_plain;h=003ff52ebbe80e450630139749d9454a04f20639;p=minix.git Revert "drivers/fbd/action.c: removed some 64-bit functions" This reverts commit 85e7d849c804ae9df50e29dc9c81057a83e16726. This introduce a bug in position computing for disk bigger than 4GB. Change-Id: I281e60e9644d995cc4643006b50c05693f939b44 --- diff --git a/drivers/fbd/action.c b/drivers/fbd/action.c index 624df263d..a4b985620 100644 --- a/drivers/fbd/action.c +++ b/drivers/fbd/action.c @@ -49,14 +49,14 @@ static size_t get_range(struct fbd_rule *rule, u64_t pos, size_t *size, to_eof = cmp64(rule->start, rule->end) >= 0; if (cmp64(pos, rule->start) > 0) { - if (skip != NULL) *skip = pos - rule->start; + if (skip != NULL) *skip = sub64(pos, rule->start); off = 0; } else { if (skip != NULL) *skip = ((u64_t)(0)); - delta = rule->start - pos; + delta = sub64(rule->start, pos); assert(ex64hi(delta) == 0); @@ -66,7 +66,7 @@ static size_t get_range(struct fbd_rule *rule, u64_t pos, size_t *size, if (!to_eof) { assert(cmp64(pos, rule->end) < 0); - delta = rule->end - pos; + delta = sub64(rule->end, pos); if (cmp64u(delta, *size) < 0) *size = ex64lo(delta); @@ -186,16 +186,16 @@ static void action_pre_misdir(struct fbd_rule *rule, iovec_t *UNUSED(iov), * here, because we have no idea about the actual disk size, and the * resulting address must of course be valid.. */ - range = ((rule->params.misdir.end - rule->params.misdir.start) + 1) - / rule->params.misdir.align; - + range = div64u(add64u(sub64(rule->params.misdir.end, + rule->params.misdir.start), 1), rule->params.misdir.align); + if (range > 0) choice = get_rand(range - 1); else choice = 0; - *pos = rule->params.misdir.start + - (u64_t)(choice * rule->params.misdir.align); + *pos = add64(rule->params.misdir.start, + mul64u(choice, rule->params.misdir.align)); } /*===========================================================================*