
See containerd/btrfs PR 40 and moby/moby PR 44761. (Thanks to [@]neersighted.) The containerd/btrfs library now requires headers from kernel 4.12 or newer: - https://github.com/torvalds/linux/blob/master/include/uapi/linux/btrfs.h - https://github.com/torvalds/linux/blob/master/include/uapi/linux/btrfs_tree.h These files are licensed under the GPL-2.0 WITH Linux-syscall-note, so it should be compatible with the Apache License 2.0. https://spdx.org/licenses/Linux-syscall-note.html The dependency on the kernel headers only affects users building from source. Users on older kernels may opt to not compile this library (`BUILDTAGS=no_btfs`), or to provide headers from a newer kernel. Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
40 lines
1.3 KiB
C
40 lines
1.3 KiB
C
/*
|
|
Copyright The containerd Authors
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
#include <linux/version.h>
|
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)
|
|
#error "Headers from kernel >= 4.12 are required on compilation time (not on run time)"
|
|
#endif
|
|
#include <linux/btrfs.h>
|
|
#include <linux/btrfs_tree.h>
|
|
|
|
// unfortunately, we need to define "alignment safe" C structs to populate for
|
|
// packed structs that aren't handled by cgo. Fields will be added here, as
|
|
// needed.
|
|
|
|
struct gosafe_btrfs_root_item {
|
|
__u8 uuid[BTRFS_UUID_SIZE];
|
|
__u8 parent_uuid[BTRFS_UUID_SIZE];
|
|
__u8 received_uuid[BTRFS_UUID_SIZE];
|
|
|
|
__le64 generation;
|
|
__le64 otransid;
|
|
__le64 flags;
|
|
};
|
|
|
|
void unpack_root_item(struct gosafe_btrfs_root_item* dst, struct btrfs_root_item* src);
|
|
/* void unpack_root_ref(struct gosafe_btrfs_root_ref* dst, struct btrfs_root_ref* src); */
|