From a038cccf88998814249a7a40b71a33a680e3f02f Mon Sep 17 00:00:00 2001 From: Julio Montes Date: Fri, 1 Apr 2016 08:58:29 -0600 Subject: [PATCH] Fix compilation errors with btrfs-progs-4.5 btrfs-progs-4.5 introduces device delete by devid for this reason btrfs_ioctl_vol_args_v2's name was encapsulated in a union this patch is for setting btrfs_ioctl_vol_args_v2's name using a C function in order to preserve compatibility with all btrfs-progs versions Signed-off-by: Julio Montes --- daemon/graphdriver/btrfs/btrfs.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/daemon/graphdriver/btrfs/btrfs.go b/daemon/graphdriver/btrfs/btrfs.go index 9d69474b1c..128a807874 100644 --- a/daemon/graphdriver/btrfs/btrfs.go +++ b/daemon/graphdriver/btrfs/btrfs.go @@ -7,6 +7,10 @@ package btrfs #include #include #include + +static void set_name_btrfs_ioctl_vol_args_v2(struct btrfs_ioctl_vol_args_v2* btrfs_struct, const char* value) { + snprintf(btrfs_struct->name, BTRFS_SUBVOL_NAME_MAX, "%s", value); +} */ import "C" @@ -159,9 +163,10 @@ func subvolSnapshot(src, dest, name string) error { var args C.struct_btrfs_ioctl_vol_args_v2 args.fd = C.__s64(getDirFd(srcDir)) - for i, c := range []byte(name) { - args.name[i] = C.char(c) - } + + var cs = C.CString(name) + C.set_name_btrfs_ioctl_vol_args_v2(&args, cs) + C.free(unsafe.Pointer(cs)) _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, getDirFd(destDir), C.BTRFS_IOC_SNAP_CREATE_V2, uintptr(unsafe.Pointer(&args)))