Commit a32ef786f4556ebb5e4b7329ac80810ebaa58a81
1 parent
ac674887
Introduce new helper function qcow_shedule_bh() (Gleb Natapov)
Use it to remove code duplications from qcow_aio_read_cb(). Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5858 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
20 additions
and
27 deletions
block-qcow2.c
@@ -1177,6 +1177,20 @@ static void qcow_aio_read_bh(void *opaque) | @@ -1177,6 +1177,20 @@ static void qcow_aio_read_bh(void *opaque) | ||
1177 | qcow_aio_read_cb(opaque, 0); | 1177 | qcow_aio_read_cb(opaque, 0); |
1178 | } | 1178 | } |
1179 | 1179 | ||
1180 | +static int qcow_schedule_bh(QEMUBHFunc *cb, QCowAIOCB *acb) | ||
1181 | +{ | ||
1182 | + if (acb->bh) | ||
1183 | + return -EIO; | ||
1184 | + | ||
1185 | + acb->bh = qemu_bh_new(cb, acb); | ||
1186 | + if (!acb->bh) | ||
1187 | + return -EIO; | ||
1188 | + | ||
1189 | + qemu_bh_schedule(acb->bh); | ||
1190 | + | ||
1191 | + return 0; | ||
1192 | +} | ||
1193 | + | ||
1180 | static void qcow_aio_read_cb(void *opaque, int ret) | 1194 | static void qcow_aio_read_cb(void *opaque, int ret) |
1181 | { | 1195 | { |
1182 | QCowAIOCB *acb = opaque; | 1196 | QCowAIOCB *acb = opaque; |
@@ -1232,30 +1246,16 @@ fail: | @@ -1232,30 +1246,16 @@ fail: | ||
1232 | if (acb->hd_aiocb == NULL) | 1246 | if (acb->hd_aiocb == NULL) |
1233 | goto fail; | 1247 | goto fail; |
1234 | } else { | 1248 | } else { |
1235 | - if (acb->bh) { | ||
1236 | - ret = -EIO; | ||
1237 | - goto fail; | ||
1238 | - } | ||
1239 | - acb->bh = qemu_bh_new(qcow_aio_read_bh, acb); | ||
1240 | - if (!acb->bh) { | ||
1241 | - ret = -EIO; | 1249 | + ret = qcow_schedule_bh(qcow_aio_read_bh, acb); |
1250 | + if (ret < 0) | ||
1242 | goto fail; | 1251 | goto fail; |
1243 | - } | ||
1244 | - qemu_bh_schedule(acb->bh); | ||
1245 | } | 1252 | } |
1246 | } else { | 1253 | } else { |
1247 | /* Note: in this case, no need to wait */ | 1254 | /* Note: in this case, no need to wait */ |
1248 | memset(acb->buf, 0, 512 * acb->n); | 1255 | memset(acb->buf, 0, 512 * acb->n); |
1249 | - if (acb->bh) { | ||
1250 | - ret = -EIO; | ||
1251 | - goto fail; | ||
1252 | - } | ||
1253 | - acb->bh = qemu_bh_new(qcow_aio_read_bh, acb); | ||
1254 | - if (!acb->bh) { | ||
1255 | - ret = -EIO; | 1256 | + ret = qcow_schedule_bh(qcow_aio_read_bh, acb); |
1257 | + if (ret < 0) | ||
1256 | goto fail; | 1258 | goto fail; |
1257 | - } | ||
1258 | - qemu_bh_schedule(acb->bh); | ||
1259 | } | 1259 | } |
1260 | } else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) { | 1260 | } else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) { |
1261 | /* add AIO support for compressed blocks ? */ | 1261 | /* add AIO support for compressed blocks ? */ |
@@ -1263,16 +1263,9 @@ fail: | @@ -1263,16 +1263,9 @@ fail: | ||
1263 | goto fail; | 1263 | goto fail; |
1264 | memcpy(acb->buf, | 1264 | memcpy(acb->buf, |
1265 | s->cluster_cache + index_in_cluster * 512, 512 * acb->n); | 1265 | s->cluster_cache + index_in_cluster * 512, 512 * acb->n); |
1266 | - if (acb->bh) { | ||
1267 | - ret = -EIO; | ||
1268 | - goto fail; | ||
1269 | - } | ||
1270 | - acb->bh = qemu_bh_new(qcow_aio_read_bh, acb); | ||
1271 | - if (!acb->bh) { | ||
1272 | - ret = -EIO; | 1266 | + ret = qcow_schedule_bh(qcow_aio_read_bh, acb); |
1267 | + if (ret < 0) | ||
1273 | goto fail; | 1268 | goto fail; |
1274 | - } | ||
1275 | - qemu_bh_schedule(acb->bh); | ||
1276 | } else { | 1269 | } else { |
1277 | if ((acb->cluster_offset & 511) != 0) { | 1270 | if ((acb->cluster_offset & 511) != 0) { |
1278 | ret = -EIO; | 1271 | ret = -EIO; |