Merge "adds LO_FLAGS_AUTOCLEAR for loop device of zram backing device"
This commit is contained in:
commit
af09c15049
|
@ -2119,6 +2119,9 @@ static bool PrepareZramBackingDevice(off64_t size) {
|
|||
PERROR << "Cannot open " << loop_device;
|
||||
return false;
|
||||
}
|
||||
if (!LoopControl::SetAutoClearStatus(loop_fd.get())) {
|
||||
PERROR << "Failed set LO_FLAGS_AUTOCLEAR for " << loop_device;
|
||||
}
|
||||
if (!LoopControl::EnableDirectIo(loop_fd.get())) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -46,6 +46,9 @@ class LoopControl final {
|
|||
// Enable Direct I/O on a loop device. This requires kernel 4.9+.
|
||||
static bool EnableDirectIo(int fd);
|
||||
|
||||
// Set LO_FLAGS_AUTOCLEAR on a loop device.
|
||||
static bool SetAutoClearStatus(int fd);
|
||||
|
||||
LoopControl(const LoopControl&) = delete;
|
||||
LoopControl& operator=(const LoopControl&) = delete;
|
||||
LoopControl& operator=(LoopControl&&) = default;
|
||||
|
|
|
@ -133,6 +133,16 @@ bool LoopControl::EnableDirectIo(int fd) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool LoopControl::SetAutoClearStatus(int fd) {
|
||||
struct loop_info64 info = {};
|
||||
|
||||
info.lo_flags |= LO_FLAGS_AUTOCLEAR;
|
||||
if (ioctl(fd, LOOP_SET_STATUS64, &info)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
LoopDevice::LoopDevice(android::base::borrowed_fd fd, const std::chrono::milliseconds& timeout_ms,
|
||||
bool auto_close)
|
||||
: fd_(fd), owned_fd_(-1) {
|
||||
|
|
Loading…
Reference in New Issue