diff --git a/libzfs.pyx b/libzfs.pyx index 19a9a3f..35a3718 100644 --- a/libzfs.pyx +++ b/libzfs.pyx @@ -3396,6 +3396,17 @@ cdef class ZFSPool(object): self.root.write_history('zpool upgrade', self.name) + def prefetch(self): + cdef int ret + + with nogil: + ret = libzfs.zpool_prefetch(self.handle, zfs.ZPOOL_PREFETCH_DDT) + + if ret != 0: + raise self.root.get_error() + + self.root.write_history('zpool prefetch -t ddt', self.name) + cdef class ZFSImportablePool(ZFSPool): cdef NVList nvlist diff --git a/pxd/libzfs.pxd b/pxd/libzfs.pxd index 6afa275..03150bf 100644 --- a/pxd/libzfs.pxd +++ b/pxd/libzfs.pxd @@ -629,6 +629,9 @@ cdef extern from "libzfs.h" nogil: extern int zmount(const char *, const char *, int, char *, char *, int, char *, int) + extern int zpool_prefetch(zpool_handle_t *, zfs.zpool_prefetch_type_t); + extern int zpool_ddt_prune(zpool_handle_t *, zfs.zpool_ddt_prune_unit_t, uint64_t) + IF HAVE_ZFS_FOREACH_MOUNTPOINT: extern void zfs_foreach_mountpoint( libzfs_handle_t *, zfs_handle_t **, size_t, zfs_iter_f, void*, boolean_t diff --git a/pxd/zfs.pxd b/pxd/zfs.pxd index 657a79e..52c0223 100644 --- a/pxd/zfs.pxd +++ b/pxd/zfs.pxd @@ -115,6 +115,15 @@ cdef extern from "sys/fs/zfs.h" nogil: ZPOOL_WAIT_TRIM, ZPOOL_WAIT_NUM_ACTIVITIES + ctypedef enum zpool_prefetch_type_t: + ZPOOL_PREFETCH_NONE + ZPOOL_PREFETCH_DDT + + ctypedef enum zpool_ddt_prune_unit_t: + ZPOOL_DDT_PRUNE_NONE + ZPOOL_DDT_PRUNE_AGE + ZPOOL_DDT_PRUNE_PERCENTAGE + enum: ZIO_TYPES ZFS_NUM_USERQUOTA_PROPS