aio
iodevinfo_t *aio, *dio, *oio;
safe_zalloc((void *)&aio, size, 0);
aio[i] = axio[j];
axio = aio;
iodevinfo_t *nio, *oio, *aio, *dio;
aio = axio;
aio->kios.wlastupdate += dio->kios.wlastupdate
aio->kios.reads += dio->kios.reads
aio->kios.writes += dio->kios.writes
aio->kios.nread += dio->kios.nread
aio->kios.nwritten += dio->kios.nwritten
aio->kios.wlentime += dio->kios.wlentime
aio->kios.rlentime += dio->kios.rlentime
aio->kios.wtime += dio->kios.wtime
aio->kios.rtime += dio->kios.rtime
aio->ks.ks_snaptime += dio->ks.ks_snaptime
aio++;
extern int zvol_aread(dev_t dev, struct aio_req *aio, cred_t *cr);
extern int zvol_awrite(dev_t dev, struct aio_req *aio, cred_t *cr);
vdev_queue_agg_io_done(zio_t *aio)
if (aio->io_type == ZIO_TYPE_READ) {
while ((pio = zio_walk_parents(aio, &zl)) != NULL) {
abd_copy_off(pio->io_abd, aio->io_abd,
0, pio->io_offset - aio->io_offset, pio->io_size);
abd_free(aio->io_abd);
zio_t *first, *last, *aio, *dio, *mandatory, *nio;
aio = zio_vdev_delegated_io(first->io_vd, first->io_offset,
aio->io_timestamp = first->io_timestamp;
ASSERT3U(dio->io_type, ==, aio->io_type);
abd_zero_off(aio->io_abd,
dio->io_offset - aio->io_offset, dio->io_size);
abd_copy_off(aio->io_abd, dio->io_abd,
dio->io_offset - aio->io_offset, 0, dio->io_size);
zio_add_child(dio, aio);
while ((dio = zio_walk_parents(aio, &zl)) != NULL) {
return (aio);
zio_t *zio, *aio;
aio = vdev_queue_aggregate(vq, zio);
if (aio != NULL)
zio = aio;
bd_aread(dev_t dev, struct aio_req *aio, cred_t *credp)
int ret = bd_check_uio(dev, aio->aio_uio);
return (aphysio(bd_strategy, anocancel, dev, B_READ, bd_minphys, aio));
bd_awrite(dev_t dev, struct aio_req *aio, cred_t *credp)
int ret = bd_check_uio(dev, aio->aio_uio);
return (aphysio(bd_strategy, anocancel, dev, B_WRITE, bd_minphys, aio));
lofi_aread(dev_t dev, struct aio_req *aio, struct cred *credp __unused)
UIO_CHECK(aio->aio_uio);
return (aphysio(lofi_strategy, anocancel, dev, B_READ, minphys, aio));
lofi_awrite(dev_t dev, struct aio_req *aio, struct cred *credp __unused)
UIO_CHECK(aio->aio_uio);
return (aphysio(lofi_strategy, anocancel, dev, B_WRITE, minphys, aio));
sdaread(dev_t dev, struct aio_req *aio, cred_t *cred_p)
struct uio *uio = aio->aio_uio;
err = aphysio(sdstrategy, anocancel, dev, B_READ, sdmin, aio);
sdawrite(dev_t dev, struct aio_req *aio, cred_t *cred_p)
struct uio *uio = aio->aio_uio;
err = aphysio(sdstrategy, anocancel, dev, B_WRITE, sdmin, aio);
static int sdaread(dev_t dev, struct aio_req *aio, cred_t *cred_p);
static int sdawrite(dev_t dev, struct aio_req *aio, cred_t *cred_p);
st_aread(dev_t dev, struct aio_req *aio, cred_t *cred_p)
return (st_arw(dev, aio, B_READ));
st_awrite(dev_t dev, struct aio_req *aio, cred_t *cred_p)
return (st_arw(dev, aio, B_WRITE));
st_arw(dev_t dev, struct aio_req *aio, int flag)
struct uio *uio = aio->aio_uio;
aphysio(st_queued_strategy, anocancel, dev, flag, st_minphys, aio);
static int st_aread(dev_t dev, struct aio_req *aio, cred_t *cred_p);
static int st_awrite(dev_t dev, struct aio_req *aio, cred_t *cred_p);
static int st_arw(dev_t dev, struct aio_req *aio, int flag);
static int driver_aio_write(vnode_t *vp, struct aio_req *aio, cred_t *cred_p);
static int driver_aio_read(vnode_t *vp, struct aio_req *aio, cred_t *cred_p);
aiop = kmem_zalloc(sizeof (struct aio), KM_NOSLEEP);
driver_aio_write(vnode_t *vp, struct aio_req *aio, cred_t *cred_p)
return ((*cb->cb_awrite)(dev, aio, cred_p));
driver_aio_read(vnode_t *vp, struct aio_req *aio, cred_t *cred_p)
return ((*cb->cb_aread)(dev, aio, cred_p));
kmem_free(aiop, sizeof (struct aio));
struct aio *aiop = procp->p_aio;
struct aio_req *aio)
struct uio *uio = aio->aio_uio;
aio_req_t *reqp = (aio_req_t *)aio->aio_private;
int (*cb_aread)(dev_t dev, struct aio_req *aio, cred_t *credp);
int (*cb_awrite)(dev_t dev, struct aio_req *aio, cred_t *credp);
extern int clpxfs_aio_write(vnode_t *vp, struct aio_req *aio, cred_t *cred_p);
extern int clpxfs_aio_read(vnode_t *vp, struct aio_req *aio, cred_t *cred_p);
struct aio *p_aio; /* pointer to async I/O struct */
static int cmdkarw(dev_t dev, struct aio_req *aio, int flag);
cmdkaread(dev_t dev, struct aio_req *aio, cred_t *credp)
return (cmdkarw(dev, aio, B_READ));
cmdkawrite(dev_t dev, struct aio_req *aio, cred_t *credp)
return (cmdkarw(dev, aio, B_WRITE));
cmdkarw(dev_t dev, struct aio_req *aio, int flag)
return (aphysio(cmdkstrategy, anocancel, dev, flag, cmdkmin, aio));
static int cmdkaread(dev_t dev, struct aio_req *aio, cred_t *credp);
static int cmdkawrite(dev_t dev, struct aio_req *aio, cred_t *credp);
dcdaread(dev_t dev, struct aio_req *aio, cred_t *cred_p)
struct uio *uio = aio->aio_uio;
return (aphysio(dcdstrategy, anocancel, dev, B_READ, dcdmin, aio));
dcdawrite(dev_t dev, struct aio_req *aio, cred_t *cred_p)
struct uio *uio = aio->aio_uio;
return (aphysio(dcdstrategy, anocancel, dev, B_WRITE, dcdmin, aio));
static int dcdaread(dev_t dev, struct aio_req *aio, cred_t *cred_p);
static int dcdawrite(dev_t dev, struct aio_req *aio, cred_t *cred_p);
static int vdc_aread(dev_t dev, struct aio_req *aio, cred_t *cred);
static int vdc_awrite(dev_t dev, struct aio_req *aio, cred_t *cred);
vdc_aread(dev_t dev, struct aio_req *aio, cred_t *cred)
return (aphysio(vdc_strategy, anocancel, dev, B_READ, vdc_min, aio));
vdc_awrite(dev_t dev, struct aio_req *aio, cred_t *cred)
return (aphysio(vdc_strategy, anocancel, dev, B_WRITE, vdc_min, aio));