zio: function to issue flushes by trace tree
If you have a trace tree from, say, a write, hand it directly to zio_flush_traced() to flush only the leaf vdevs that were involved in the write. Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
This commit is contained in:
parent
4b07fb9a98
commit
ca18c876e5
|
@ -594,6 +594,7 @@ extern zio_t *zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg,
|
||||||
extern int zio_alloc_zil(spa_t *spa, objset_t *os, uint64_t txg,
|
extern int zio_alloc_zil(spa_t *spa, objset_t *os, uint64_t txg,
|
||||||
blkptr_t *new_bp, uint64_t size, boolean_t *slog);
|
blkptr_t *new_bp, uint64_t size, boolean_t *slog);
|
||||||
extern void zio_flush(zio_t *zio, vdev_t *vd, boolean_t propagate);
|
extern void zio_flush(zio_t *zio, vdev_t *vd, boolean_t propagate);
|
||||||
|
extern void zio_flush_traced(zio_t *zio, avl_tree_t *t, boolean_t propagate);
|
||||||
extern void zio_shrink(zio_t *zio, uint64_t size);
|
extern void zio_shrink(zio_t *zio, uint64_t size);
|
||||||
|
|
||||||
extern int zio_wait(zio_t *zio);
|
extern int zio_wait(zio_t *zio);
|
||||||
|
|
|
@ -1613,6 +1613,36 @@ zio_flush(zio_t *pio, vdev_t *vd, boolean_t propagate)
|
||||||
zio_nowait(zio);
|
zio_nowait(zio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
zio_flush_traced(zio_t *pio, avl_tree_t *t, boolean_t propagate)
|
||||||
|
{
|
||||||
|
const int cmd = DKIOCFLUSHWRITECACHE;
|
||||||
|
const zio_flag_t flags =
|
||||||
|
ZIO_FLAG_CANFAIL | ZIO_FLAG_DONT_RETRY |
|
||||||
|
(propagate ? 0 : ZIO_FLAG_DONT_PROPAGATE);
|
||||||
|
spa_t *spa = pio->io_spa;
|
||||||
|
zio_t *fio, *zio;
|
||||||
|
zio_vdev_trace_t *zvt;
|
||||||
|
vdev_t *vd;
|
||||||
|
|
||||||
|
fio = zio_null(pio, spa, NULL, NULL, NULL, flags);
|
||||||
|
|
||||||
|
for (zvt = avl_first(t); zvt != NULL; zvt = AVL_NEXT(t, zvt)) {
|
||||||
|
vd = vdev_lookup_by_guid(spa->spa_root_vdev, zvt->zvt_guid);
|
||||||
|
if (vd == NULL)
|
||||||
|
continue;
|
||||||
|
if (vd->vdev_children == 0) {
|
||||||
|
zio = zio_create(fio, spa, 0, NULL, NULL, 0, 0, NULL,
|
||||||
|
NULL, ZIO_TYPE_IOCTL, ZIO_PRIORITY_NOW, flags, vd,
|
||||||
|
0, NULL, ZIO_STAGE_OPEN, ZIO_IOCTL_PIPELINE);
|
||||||
|
zio->io_cmd = cmd;
|
||||||
|
zio_nowait(zio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zio_nowait(fio);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zio_shrink(zio_t *zio, uint64_t size)
|
zio_shrink(zio_t *zio, uint64_t size)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue