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:
parent
ea17c89165
commit
bd336e81a6
@ -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);
|
||||||
|
38
lib/fs.cc
38
lib/fs.cc
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user