Port to zfs-0.7.x

Compatibility changes to work with libzfs 0.7.x, changes are not bacward compatible
This commit is contained in:
Faruk Kasumovic 2018-07-02 14:37:54 +02:00
parent 4cd8ea7346
commit c0f5b857fc
5 changed files with 36 additions and 8 deletions

View File

@ -144,7 +144,9 @@ const (
// Pool properties. Enumerates available ZFS pool properties. Use it to access // Pool properties. Enumerates available ZFS pool properties. Use it to access
// pool properties either to read or set soecific property. // pool properties either to read or set soecific property.
const ( const (
PoolPropName Prop = iota PoolPropCont Prop = iota - 2
PoolPropInval
PoolPropName
PoolPropSize PoolPropSize
PoolPropCapacity PoolPropCapacity
PoolPropAltroot PoolPropAltroot
@ -171,6 +173,8 @@ const (
PoolPropLeaked PoolPropLeaked
PoolPropMaxBlockSize PoolPropMaxBlockSize
PoolPropTName PoolPropTName
PoolPropMaxNodeSize
PoolPropMultiHost
PoolNumProps PoolNumProps
) )
@ -181,7 +185,9 @@ const (
* the property table in module/zcommon/zfs_prop.c. * the property table in module/zcommon/zfs_prop.c.
*/ */
const ( const (
DatasetPropType Prop = iota DatasetPropCont Prop = iota - 2
DatasetPropBad
DatasetPropType
DatasetPropCreation DatasetPropCreation
DatasetPropUsed DatasetPropUsed
DatasetPropAvailable DatasetPropAvailable
@ -207,7 +213,7 @@ const (
DatasetPropSnapdir DatasetPropSnapdir
DatasetPropPrivate /* not exposed to user, temporary */ DatasetPropPrivate /* not exposed to user, temporary */
DatasetPropAclinherit DatasetPropAclinherit
DatasetPropCreatetxg /* not exposed to the user */ DatasetPropCreateTXG /* not exposed to the user */
DatasetPropName /* not exposed to the user */ DatasetPropName /* not exposed to the user */
DatasetPropCanmount DatasetPropCanmount
DatasetPropIscsioptions /* not exposed to the user */ DatasetPropIscsioptions /* not exposed to the user */
@ -240,12 +246,14 @@ const (
DatasetPropDedup DatasetPropDedup
DatasetPropMlslabel DatasetPropMlslabel
DatasetPropSync DatasetPropSync
DatasetPropDnodeSize
DatasetPropRefratio DatasetPropRefratio
DatasetPropWritten DatasetPropWritten
DatasetPropClones DatasetPropClones
DatasetPropLogicalused DatasetPropLogicalused
DatasetPropLogicalreferenced DatasetPropLogicalreferenced
DatasetPropInconsistent /* not exposed to the user */ DatasetPropInconsistent /* not exposed to the user */
DatasetPropVolmode
DatasetPropFilesystemLimit DatasetPropFilesystemLimit
DatasetPropSnapshotLimit DatasetPropSnapshotLimit
DatasetPropFilesystemCount DatasetPropFilesystemCount
@ -259,6 +267,17 @@ const (
DatasetPropRelatime DatasetPropRelatime
DatasetPropRedundantMetadata DatasetPropRedundantMetadata
DatasetPropOverlay DatasetPropOverlay
DatasetPropPrevSnap
DatasetPropReceiveResumeToken
DatasetPropEncryption
DatasetPropKeyLocation
DatasetPropKeyFormat
DatasetPropPBKDF2Salt
DatasetPropPBKDF2Iters
DatasetPropEncryptionRoot
DatasetPropKeyGUID
DatasetPropKeyStatus
DatasetPropRemapTXG /* not exposed to the user */
DatasetNumProps DatasetNumProps
) )

View File

@ -261,7 +261,7 @@ func (d *Dataset) Receive(inf *os.File, flags RecvFlags) (err error) {
defer C.free(unsafe.Pointer(cflags)) defer C.free(unsafe.Pointer(cflags))
dest := C.CString(dpath) dest := C.CString(dpath)
defer C.free(unsafe.Pointer(dest)) defer C.free(unsafe.Pointer(dest))
ec := C.zfs_receive(C.libzfsHandle, dest, cflags, C.int(inf.Fd()), nil) ec := C.zfs_receive(C.libzfsHandle, dest, nil, cflags, C.int(inf.Fd()), nil)
if ec != 0 { if ec != 0 {
err = fmt.Errorf("ZFS receive of %s failed. %s", C.GoString(dest), LastError().Error()) err = fmt.Errorf("ZFS receive of %s failed. %s", C.GoString(dest), LastError().Error())
} }

12
zpool.c
View File

@ -2,7 +2,11 @@
* using libzfs from go language, and make go code shorter and more readable. * using libzfs from go language, and make go code shorter and more readable.
*/ */
typedef unsigned long int rlim64_t;
#include <libzfs.h> #include <libzfs.h>
#include <libzfs/sys/zfs_context.h>
#include <memory.h> #include <memory.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
@ -189,7 +193,7 @@ property_list_ptr read_zpool_property(zpool_list_ptr pool, int prop) {
property_list_ptr list = new_property_list(); property_list_ptr list = new_property_list();
r = zpool_get_prop(pool->zph, prop, r = zpool_get_prop(pool->zph, prop,
list->value, INT_MAX_VALUE, &source); list->value, INT_MAX_VALUE, &source, B_FALSE);
if (r == 0) { if (r == 0) {
// strcpy(list->name, zpool_prop_to_name(prop)); // strcpy(list->name, zpool_prop_to_name(prop));
zprop_source_tostr(list->source, source); zprop_source_tostr(list->source, source);
@ -491,11 +495,15 @@ nvlist_ptr get_zpool_vdev_tree(nvlist_ptr nv) {
nvlist_ptr go_zpool_search_import(libzfs_handle_ptr zfsh, int paths, char **path, boolean_t do_scan) { nvlist_ptr go_zpool_search_import(libzfs_handle_ptr zfsh, int paths, char **path, boolean_t do_scan) {
importargs_t idata = { 0 }; importargs_t idata = { 0 };
nvlist_ptr pools = NULL;
idata.path = path; idata.path = path;
idata.paths = paths; idata.paths = paths;
// idata.scan = 0; // idata.scan = 0;
return zpool_search_import(zfsh, &idata); thread_init();
pools = zpool_search_import(zfsh, &idata);
thread_fini();
return pools;
} }

View File

@ -1,5 +1,6 @@
package zfs package zfs
// #cgo CFLAGS: -D__USE_LARGEFILE64=1
// #include <stdlib.h> // #include <stdlib.h>
// #include <libzfs.h> // #include <libzfs.h>
// #include "common.h" // #include "common.h"
@ -364,7 +365,7 @@ func poolSearchImport(q string, searchpaths []string, guid bool) (name string,
C.strings_setat(cpaths, C.int(i), csPath) C.strings_setat(cpaths, C.int(i), csPath)
} }
pools := C.zpool_find_import(C.libzfsHandle, C.int(numofp), cpaths) pools := C.go_zpool_search_import(C.libzfsHandle, C.int(numofp), cpaths, C.B_FALSE)
defer C.nvlist_free(pools) defer C.nvlist_free(pools)
elem = C.nvlist_next_nvpair(pools, elem) elem = C.nvlist_next_nvpair(pools, elem)

View File

@ -543,7 +543,7 @@ func TestPool_VDevTree(t *testing.T) {
// TODO: Add test cases. // TODO: Add test cases.
{ {
name: "test1", name: "test1",
fields: fields{"NETSTOR"}, fields: fields{"TESTPOOL"},
wantErr: false, wantErr: false,
}, },
} }