mirror of
https://github.com/Zygo/bees.git
synced 2025-06-16 17:46:16 +02:00
fs: add support and workarounds for btrfs fs_info v2
Define a local copy of the header that has fields for the csum type and length, so we can build in places that haven't caught up to kernel 5.5 headers yet. The reason why the csum type and length are not unconditionally filled in eludes me. csum_length is necessarily non-zero, and the cost of the conditional is worse than the cost of the copy, so the whole flags dance is a WTF...but it's part of the kernel API now, so it's too late to NAK it. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
17
lib/fs.cc
17
lib/fs.cc
@ -1084,13 +1084,14 @@ namespace crucible {
|
||||
|
||||
BtrfsIoctlFsInfoArgs::BtrfsIoctlFsInfoArgs()
|
||||
{
|
||||
memset_zero<btrfs_ioctl_fs_info_args>(this);
|
||||
memset_zero<btrfs_ioctl_fs_info_args_v2>(this);
|
||||
flags = BTRFS_FS_INFO_FLAG_CSUM_INFO;
|
||||
}
|
||||
|
||||
void
|
||||
BtrfsIoctlFsInfoArgs::do_ioctl(int fd)
|
||||
{
|
||||
btrfs_ioctl_fs_info_args *p = static_cast<btrfs_ioctl_fs_info_args *>(this);
|
||||
btrfs_ioctl_fs_info_args_v2 *p = static_cast<btrfs_ioctl_fs_info_args_v2 *>(this);
|
||||
if (ioctl(fd, BTRFS_IOC_FS_INFO, p)) {
|
||||
THROW_ERRNO("BTRFS_IOC_FS_INFO: fd " << fd);
|
||||
}
|
||||
@ -1102,4 +1103,16 @@ namespace crucible {
|
||||
return uuid_unparse(fsid);
|
||||
}
|
||||
|
||||
uint16_t
|
||||
BtrfsIoctlFsInfoArgs::csum_type() const
|
||||
{
|
||||
return this->btrfs_ioctl_fs_info_args_v2::csum_type;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
BtrfsIoctlFsInfoArgs::csum_size() const
|
||||
{
|
||||
return this->btrfs_ioctl_fs_info_args_v2::csum_size;
|
||||
}
|
||||
|
||||
};
|
||||
|
Reference in New Issue
Block a user