X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=kernel%2Fresource.c;h=03c897f7935e100276e41ed83e1e3af3f549bbd9;hb=84abd88a70090cf00f9e45c3a81680874f17626e;hp=e68cd7477c4001b55d912e39d206be54a70d4f6e;hpb=13ca0fcaa33f6b1984c4111b6ec5df42689fea6f;p=linux-2.6-block.git diff --git a/kernel/resource.c b/kernel/resource.c index e68cd7477c40..03c897f7935e 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -321,35 +321,37 @@ static int find_resource(struct resource *root, struct resource *new, void *alignf_data) { struct resource *this = root->child; + struct resource tmp = *new; - new->start = root->start; + tmp.start = root->start; /* * Skip past an allocated resource that starts at 0, since the assignment - * of this->start - 1 to new->end below would cause an underflow. + * of this->start - 1 to tmp->end below would cause an underflow. */ if (this && this->start == 0) { - new->start = this->end + 1; + tmp.start = this->end + 1; this = this->sibling; } for(;;) { if (this) - new->end = this->start - 1; + tmp.end = this->start - 1; else - new->end = root->end; - if (new->start < min) - new->start = min; - if (new->end > max) - new->end = max; - new->start = ALIGN(new->start, align); + tmp.end = root->end; + if (tmp.start < min) + tmp.start = min; + if (tmp.end > max) + tmp.end = max; + tmp.start = ALIGN(tmp.start, align); if (alignf) - alignf(alignf_data, new, size, align); - if (new->start < new->end && new->end - new->start >= size - 1) { - new->end = new->start + size - 1; + alignf(alignf_data, &tmp, size, align); + if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) { + new->start = tmp.start; + new->end = tmp.start + size - 1; return 0; } if (!this) break; - new->start = this->end + 1; + tmp.start = this->end + 1; this = this->sibling; } return -EBUSY;