Loading fs_mgr/fs_mgr.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading fs_mgr/libdm/include/libdm/loop_control.h +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading fs_mgr/libdm/loop_control.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
fs_mgr/fs_mgr.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
fs_mgr/libdm/include/libdm/loop_control.h +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
fs_mgr/libdm/loop_control.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -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