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 | 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 | 1194 | static void qcow_aio_read_cb(void *opaque, int ret) |
| 1181 | 1195 | { |
| 1182 | 1196 | QCowAIOCB *acb = opaque; |
| ... | ... | @@ -1232,30 +1246,16 @@ fail: |
| 1232 | 1246 | if (acb->hd_aiocb == NULL) |
| 1233 | 1247 | goto fail; |
| 1234 | 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 | 1251 | goto fail; |
| 1243 | - } | |
| 1244 | - qemu_bh_schedule(acb->bh); | |
| 1245 | 1252 | } |
| 1246 | 1253 | } else { |
| 1247 | 1254 | /* Note: in this case, no need to wait */ |
| 1248 | 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 | 1258 | goto fail; |
| 1257 | - } | |
| 1258 | - qemu_bh_schedule(acb->bh); | |
| 1259 | 1259 | } |
| 1260 | 1260 | } else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) { |
| 1261 | 1261 | /* add AIO support for compressed blocks ? */ |
| ... | ... | @@ -1263,16 +1263,9 @@ fail: |
| 1263 | 1263 | goto fail; |
| 1264 | 1264 | memcpy(acb->buf, |
| 1265 | 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 | 1268 | goto fail; |
| 1274 | - } | |
| 1275 | - qemu_bh_schedule(acb->bh); | |
| 1276 | 1269 | } else { |
| 1277 | 1270 | if ((acb->cluster_offset & 511) != 0) { |
| 1278 | 1271 | ret = -EIO; | ... | ... |