1
0
mirror of https://github.com/Zygo/bees.git synced 2025-05-17 21:35:45 +02:00

fs: get rid of base class btrfs_ioctl_logical_ino_args

Another instance of the pattern where we derived a crucible class
from a btrfs struct.  Make it an automatic variable instead.

Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
Zygo Blaxell 2022-10-23 14:01:38 -04:00
parent ea17c89165
commit bd336e81a6
2 changed files with 23 additions and 24 deletions

View File

@ -64,7 +64,7 @@ namespace crucible {
ByteVector m_data; ByteVector m_data;
}; };
struct BtrfsIoctlLogicalInoArgs : public btrfs_ioctl_logical_ino_args { struct BtrfsIoctlLogicalInoArgs {
BtrfsIoctlLogicalInoArgs(uint64_t logical, size_t buf_size = 16 * 1024 * 1024); BtrfsIoctlLogicalInoArgs(uint64_t logical, size_t buf_size = 16 * 1024 * 1024);
uint64_t get_flags() const; uint64_t get_flags() const;
@ -73,7 +73,6 @@ namespace crucible {
virtual void do_ioctl(int fd); virtual void do_ioctl(int fd);
virtual bool do_ioctl_nothrow(int fd); virtual bool do_ioctl_nothrow(int fd);
size_t m_container_size;
struct BtrfsInodeOffsetRootSpan { struct BtrfsInodeOffsetRootSpan {
using iterator = BtrfsInodeOffsetRoot*; using iterator = BtrfsInodeOffsetRoot*;
using const_iterator = const BtrfsInodeOffsetRoot*; using const_iterator = const BtrfsInodeOffsetRoot*;
@ -84,13 +83,17 @@ namespace crucible {
const_iterator cend() const; const_iterator cend() const;
iterator data() const; iterator data() const;
void clear(); void clear();
operator vector<BtrfsInodeOffsetRoot>() const;
private: private:
iterator m_begin = nullptr; iterator m_begin = nullptr;
iterator m_end = nullptr; iterator m_end = nullptr;
friend struct BtrfsIoctlLogicalInoArgs; friend struct BtrfsIoctlLogicalInoArgs;
} m_iors; } m_iors;
private:
size_t m_container_size;
BtrfsDataContainer m_container; BtrfsDataContainer m_container;
uint64_t m_logical;
uint64_t m_flags = 0;
friend ostream & operator<<(ostream &os, const BtrfsIoctlLogicalInoArgs *p);
}; };
ostream & operator<<(ostream &os, const BtrfsIoctlLogicalInoArgs &p); ostream & operator<<(ostream &os, const BtrfsIoctlLogicalInoArgs &p);

View File

@ -243,7 +243,7 @@ namespace crucible {
return os << "BtrfsIoctlLogicalInoArgs NULL"; return os << "BtrfsIoctlLogicalInoArgs NULL";
} }
os << "BtrfsIoctlLogicalInoArgs {"; os << "BtrfsIoctlLogicalInoArgs {";
os << " .logical = " << to_hex(p->logical); os << " .m_logical = " << to_hex(p->m_logical);
os << " .inodes[] = {\n"; os << " .inodes[] = {\n";
unsigned count = 0; unsigned count = 0;
for (auto i = p->m_iors.cbegin(); i != p->m_iors.cend(); ++i) { for (auto i = p->m_iors.cbegin(); i != p->m_iors.cend(); ++i) {
@ -254,14 +254,10 @@ namespace crucible {
} }
BtrfsIoctlLogicalInoArgs::BtrfsIoctlLogicalInoArgs(uint64_t new_logical, size_t new_size) : BtrfsIoctlLogicalInoArgs::BtrfsIoctlLogicalInoArgs(uint64_t new_logical, size_t new_size) :
btrfs_ioctl_logical_ino_args( (btrfs_ioctl_logical_ino_args) { } ),
m_container_size(new_size), m_container_size(new_size),
m_container(new_size) m_container(new_size),
m_logical(new_logical)
{ {
assert(logical == 0);
assert(size == 0);
assert(flags == 0);
logical = new_logical;
} }
size_t size_t
@ -300,11 +296,6 @@ namespace crucible {
return m_begin; return m_begin;
} }
BtrfsIoctlLogicalInoArgs::BtrfsInodeOffsetRootSpan::operator vector<BtrfsInodeOffsetRoot>() const
{
return vector<BtrfsInodeOffsetRoot>(m_begin, m_end);
}
void void
BtrfsIoctlLogicalInoArgs::BtrfsInodeOffsetRootSpan::clear() BtrfsIoctlLogicalInoArgs::BtrfsInodeOffsetRootSpan::clear()
{ {
@ -314,23 +305,28 @@ namespace crucible {
void void
BtrfsIoctlLogicalInoArgs::set_flags(uint64_t new_flags) BtrfsIoctlLogicalInoArgs::set_flags(uint64_t new_flags)
{ {
// We are still supporting building with old headers that don't have .flags yet m_flags = new_flags;
*(&reserved[0] + 3) = new_flags;
} }
uint64_t uint64_t
BtrfsIoctlLogicalInoArgs::get_flags() const BtrfsIoctlLogicalInoArgs::get_flags() const
{ {
// We are still supporting building with old headers that don't have .flags yet // We are still supporting building with old headers that don't have .flags yet
return *(&reserved[0] + 3); return m_flags;
} }
bool bool
BtrfsIoctlLogicalInoArgs::do_ioctl_nothrow(int fd) BtrfsIoctlLogicalInoArgs::do_ioctl_nothrow(int fd)
{ {
btrfs_ioctl_logical_ino_args *const p = static_cast<btrfs_ioctl_logical_ino_args *>(this); btrfs_ioctl_logical_ino_args args = (btrfs_ioctl_logical_ino_args) {
inodes = reinterpret_cast<uint64_t>(m_container.prepare(m_container_size)); .logical = m_logical,
size = m_container.get_size(); .size = m_container_size,
.inodes = reinterpret_cast<uint64_t>(m_container.prepare(m_container_size)),
};
// We are still supporting building with old headers that don't have .flags yet
*(&args.reserved[0] + 3) = m_flags;
btrfs_ioctl_logical_ino_args *const p = &args;
m_iors.clear(); m_iors.clear();
@ -368,12 +364,12 @@ namespace crucible {
} }
btrfs_data_container *const bdc = reinterpret_cast<btrfs_data_container *>(p->inodes); btrfs_data_container *const bdc = reinterpret_cast<btrfs_data_container *>(p->inodes);
BtrfsInodeOffsetRoot *const input_iter = reinterpret_cast<BtrfsInodeOffsetRoot *>(bdc->val); BtrfsInodeOffsetRoot *const ior_iter = reinterpret_cast<BtrfsInodeOffsetRoot *>(bdc->val);
// elem_cnt counts uint64_t, but BtrfsInodeOffsetRoot is 3x uint64_t // elem_cnt counts uint64_t, but BtrfsInodeOffsetRoot is 3x uint64_t
THROW_CHECK1(runtime_error, bdc->elem_cnt, bdc->elem_cnt % 3 == 0); THROW_CHECK1(runtime_error, bdc->elem_cnt, bdc->elem_cnt % 3 == 0);
m_iors.m_begin = input_iter; m_iors.m_begin = ior_iter;
m_iors.m_end = input_iter + bdc->elem_cnt / 3; m_iors.m_end = ior_iter + bdc->elem_cnt / 3;
return true; return true;
} }