summaryrefslogtreecommitdiff
path: root/block/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/stream.c')
-rw-r--r--block/stream.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/block/stream.c b/block/stream.c
index a2c8f67711..608a860aa2 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -130,14 +130,9 @@ static int coroutine_fn is_allocated_base(BlockDriverState *top,
*/
intermediate = top->backing_hd;
- while (intermediate) {
+ while (intermediate != base) {
int pnum_inter;
- /* reached base */
- if (intermediate == base) {
- *pnum = n;
- return 1;
- }
ret = bdrv_co_is_allocated(intermediate, sector_num, nb_sectors,
&pnum_inter);
if (ret < 0) {
@@ -160,6 +155,7 @@ static int coroutine_fn is_allocated_base(BlockDriverState *top,
intermediate = intermediate->backing_hd;
}
+ *pnum = n;
return 1;
}
@@ -203,14 +199,8 @@ wait:
break;
}
- if (base) {
- ret = is_allocated_base(bs, base, sector_num,
- STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n);
- } else {
- ret = bdrv_co_is_allocated(bs, sector_num,
- STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE,
- &n);
- }
+ ret = is_allocated_base(bs, base, sector_num,
+ STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n);
trace_stream_one_iteration(s, sector_num, n, ret);
if (ret == 0) {
if (s->common.speed) {