use qemu_blockalign consistently

Use qemu_blockalign for all allocations in the block layer.  This allows
increasing the required alignment, which is need to support O_DIRECT on
devices with large block sizes.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Christoph Hellwig 2010-09-12 23:42:56 +02:00 committed by Kevin Wolf
parent a655211ac6
commit 72aef7318f
5 changed files with 9 additions and 8 deletions

View File

@ -70,14 +70,15 @@ struct SCSIDiskState
char *serial; char *serial;
}; };
static SCSIDiskReq *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun) static SCSIDiskReq *scsi_new_request(SCSIDiskState *s, uint32_t tag,
uint32_t lun)
{ {
SCSIRequest *req; SCSIRequest *req;
SCSIDiskReq *r; SCSIDiskReq *r;
req = scsi_req_alloc(sizeof(SCSIDiskReq), d, tag, lun); req = scsi_req_alloc(sizeof(SCSIDiskReq), &s->qdev, tag, lun);
r = DO_UPCAST(SCSIDiskReq, req, req); r = DO_UPCAST(SCSIDiskReq, req, req);
r->iov.iov_base = qemu_memalign(512, SCSI_DMA_BUF_SIZE); r->iov.iov_base = qemu_blockalign(s->bs, SCSI_DMA_BUF_SIZE);
return r; return r;
} }
@ -939,7 +940,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
} }
/* ??? Tags are not unique for different luns. We only implement a /* ??? Tags are not unique for different luns. We only implement a
single lun, so this should not matter. */ single lun, so this should not matter. */
r = scsi_new_request(d, tag, lun); r = scsi_new_request(s, tag, lun);
outbuf = (uint8_t *)r->iov.iov_base; outbuf = (uint8_t *)r->iov.iov_base;
is_write = 0; is_write = 0;
DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0]); DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0]);

View File

@ -440,7 +440,7 @@ SDState *sd_init(BlockDriverState *bs, int is_spi)
SDState *sd; SDState *sd;
sd = (SDState *) qemu_mallocz(sizeof(SDState)); sd = (SDState *) qemu_mallocz(sizeof(SDState));
sd->buf = qemu_memalign(512, 512); sd->buf = qemu_blockalign(bs, 512);
sd->spi = is_spi; sd->spi = is_spi;
sd->enable = 1; sd->enable = 1;
sd_reset(sd, bs); sd_reset(sd, bs);

View File

@ -270,7 +270,7 @@ static ssize_t handle_aiocb_rw(struct qemu_paiocb *aiocb)
* Ok, we have to do it the hard way, copy all segments into * Ok, we have to do it the hard way, copy all segments into
* a single aligned buffer. * a single aligned buffer.
*/ */
buf = qemu_memalign(512, aiocb->aio_nbytes); buf = qemu_blockalign(aiocb->common.bs, aiocb->aio_nbytes);
if (aiocb->aio_type & QEMU_AIO_WRITE) { if (aiocb->aio_type & QEMU_AIO_WRITE) {
char *p = buf; char *p = buf;
int i; int i;

View File

@ -61,7 +61,7 @@ static void *qemu_io_alloc(size_t len, int pattern)
if (misalign) if (misalign)
len += MISALIGN_OFFSET; len += MISALIGN_OFFSET;
buf = qemu_memalign(512, len); buf = qemu_blockalign(bs, len);
memset(buf, pattern, len); memset(buf, pattern, len);
if (misalign) if (misalign)
buf += MISALIGN_OFFSET; buf += MISALIGN_OFFSET;

View File

@ -446,7 +446,7 @@ int main(int argc, char **argv)
max_fd = sharing_fds[0]; max_fd = sharing_fds[0];
nb_fds++; nb_fds++;
data = qemu_memalign(512, NBD_BUFFER_SIZE); data = qemu_blockalign(bs, NBD_BUFFER_SIZE);
if (data == NULL) if (data == NULL)
errx(EXIT_FAILURE, "Cannot allocate data buffer"); errx(EXIT_FAILURE, "Cannot allocate data buffer");