Merge "libdm: fetch and present device status flags"

This commit is contained in:
Treehugger Robot 2019-07-31 02:47:35 +00:00 committed by Gerrit Code Review
commit a3e82da054
2 changed files with 27 additions and 0 deletions

View file

@ -150,6 +150,15 @@ bool DeviceMapper::GetDeviceUniquePath(const std::string& name, std::string* pat
return true;
}
std::optional<DeviceMapper::Info> DeviceMapper::GetDetailedInfo(const std::string& name) const {
struct dm_ioctl io;
InitIo(&io, name);
if (ioctl(fd_, DM_DEV_STATUS, &io) < 0) {
return std::nullopt;
}
return Info(io.flags);
}
DmDeviceState DeviceMapper::GetState(const std::string& name) const {
struct dm_ioctl io;
InitIo(&io, name);

View file

@ -27,6 +27,7 @@
#include <chrono>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
@ -70,10 +71,27 @@ class DeviceMapper final {
uint64_t dev_;
};
class Info {
uint32_t flags_;
public:
explicit Info(uint32_t flags) : flags_(flags) {}
bool IsActiveTablePresent() const { return flags_ & DM_ACTIVE_PRESENT_FLAG; }
bool IsBufferFull() const { return flags_ & DM_BUFFER_FULL_FLAG; }
bool IsInactiveTablePresent() const { return flags_ & DM_INACTIVE_PRESENT_FLAG; }
bool IsReadOnly() const { return flags_ & DM_READONLY_FLAG; }
bool IsSuspended() const { return flags_ & DM_SUSPEND_FLAG; }
};
// Removes a device mapper device with the given name.
// Returns 'true' on success, false otherwise.
bool DeleteDevice(const std::string& name);
// Fetches and returns the complete state of the underlying device mapper
// device with given name.
std::optional<Info> GetDetailedInfo(const std::string& name) const;
// Returns the current state of the underlying device mapper device
// with given name.
// One of INVALID, SUSPENDED or ACTIVE.