Revision c1b35247
b/hw/scsi-disk.c | ||
---|---|---|
169 | 169 |
qemu_iovec_init_external(&r->qiov, &r->iov, 1); |
170 | 170 |
} |
171 | 171 |
|
172 |
static void scsi_flush_complete(void * opaque, int ret)
|
|
172 |
static void scsi_aio_complete(void *opaque, int ret)
|
|
173 | 173 |
{ |
174 | 174 |
SCSIDiskReq *r = (SCSIDiskReq *)opaque; |
175 | 175 |
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev); |
... | ... | |
222 | 222 |
|
223 | 223 |
if (scsi_is_cmd_fua(&r->req.cmd)) { |
224 | 224 |
bdrv_acct_start(s->qdev.conf.bs, &r->acct, 0, BDRV_ACCT_FLUSH); |
225 |
r->req.aiocb = bdrv_aio_flush(s->qdev.conf.bs, scsi_flush_complete, r);
|
|
225 |
r->req.aiocb = bdrv_aio_flush(s->qdev.conf.bs, scsi_aio_complete, r);
|
|
226 | 226 |
return; |
227 | 227 |
} |
228 | 228 |
|
... | ... | |
1543 | 1543 |
/* The request is used as the AIO opaque value, so add a ref. */ |
1544 | 1544 |
scsi_req_ref(&r->req); |
1545 | 1545 |
bdrv_acct_start(s->qdev.conf.bs, &r->acct, 0, BDRV_ACCT_FLUSH); |
1546 |
r->req.aiocb = bdrv_aio_flush(s->qdev.conf.bs, scsi_flush_complete, r);
|
|
1546 |
r->req.aiocb = bdrv_aio_flush(s->qdev.conf.bs, scsi_aio_complete, r);
|
|
1547 | 1547 |
return 0; |
1548 | 1548 |
case READ_6: |
1549 | 1549 |
case READ_10: |
... | ... | |
1620 | 1620 |
goto fail; |
1621 | 1621 |
} |
1622 | 1622 |
|
1623 |
rc = bdrv_discard(s->qdev.conf.bs, |
|
1624 |
r->req.cmd.lba * (s->qdev.blocksize / 512), |
|
1625 |
len * (s->qdev.blocksize / 512)); |
|
1626 |
if (rc < 0) { |
|
1627 |
/* XXX: better error code ?*/ |
|
1628 |
goto fail; |
|
1629 |
} |
|
1630 |
|
|
1631 |
break; |
|
1623 |
/* The request is used as the AIO opaque value, so add a ref. */ |
|
1624 |
scsi_req_ref(&r->req); |
|
1625 |
r->req.aiocb = bdrv_aio_discard(s->qdev.conf.bs, |
|
1626 |
r->req.cmd.lba * (s->qdev.blocksize / 512), |
|
1627 |
len * (s->qdev.blocksize / 512), |
|
1628 |
scsi_aio_complete, r); |
|
1629 |
return 0; |
|
1632 | 1630 |
default: |
1633 | 1631 |
DPRINTF("Unknown SCSI command (%2.2x)\n", buf[0]); |
1634 | 1632 |
scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE)); |
Also available in: Unified diff