Loading fs_mgr/libsnapshot/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -416,6 +416,7 @@ cc_defaults { "snapuserd_server.cpp", "snapuserd.cpp", "snapuserd_daemon.cpp", "snapuserd_worker.cpp", ], cflags: [ Loading Loading @@ -554,6 +555,7 @@ cc_test { srcs: [ "cow_snapuserd_test.cpp", "snapuserd.cpp", "snapuserd_worker.cpp", ], cflags: [ "-Wall", Loading fs_mgr/libsnapshot/cow_reader.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,29 @@ static void SHA256(const void*, size_t, uint8_t[]) { #endif } bool CowReader::InitForMerge(android::base::unique_fd&& fd) { owned_fd_ = std::move(fd); fd_ = owned_fd_.get(); auto pos = lseek(fd_.get(), 0, SEEK_END); if (pos < 0) { PLOG(ERROR) << "lseek end failed"; return false; } fd_size_ = pos; if (lseek(fd_.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } if (!android::base::ReadFully(fd_, &header_, sizeof(header_))) { PLOG(ERROR) << "read header failed"; return false; } return true; } bool CowReader::Parse(android::base::unique_fd&& fd, std::optional<uint64_t> label) { owned_fd_ = std::move(fd); return Parse(android::base::borrowed_fd{owned_fd_}, label); Loading fs_mgr/libsnapshot/include/libsnapshot/cow_reader.h +5 −0 Original line number Diff line number Diff line Loading @@ -116,12 +116,15 @@ class ICowOpReverseIter { class CowReader : public ICowReader { public: CowReader(); ~CowReader() { owned_fd_ = {}; } // Parse the COW, optionally, up to the given label. If no label is // specified, the COW must have an intact footer. bool Parse(android::base::unique_fd&& fd, std::optional<uint64_t> label = {}); bool Parse(android::base::borrowed_fd fd, std::optional<uint64_t> label = {}); bool InitForMerge(android::base::unique_fd&& fd); bool GetHeader(CowHeader* header) override; bool GetFooter(CowFooter* footer) override; Loading @@ -146,6 +149,8 @@ class CowReader : public ICowReader { uint64_t total_data_ops() { return total_data_ops_; } void CloseCowFd() { owned_fd_ = {}; } private: bool ParseOps(std::optional<uint64_t> label); Loading fs_mgr/libsnapshot/snapshot.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1265,7 +1265,7 @@ static bool DeleteDmDevice(const std::string& name, const std::chrono::milliseco LOG(ERROR) << "DeleteDevice timeout: " << name; return false; } std::this_thread::sleep_for(250ms); std::this_thread::sleep_for(400ms); } return true; Loading fs_mgr/libsnapshot/snapuserd.cpp +30 −581 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
fs_mgr/libsnapshot/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -416,6 +416,7 @@ cc_defaults { "snapuserd_server.cpp", "snapuserd.cpp", "snapuserd_daemon.cpp", "snapuserd_worker.cpp", ], cflags: [ Loading Loading @@ -554,6 +555,7 @@ cc_test { srcs: [ "cow_snapuserd_test.cpp", "snapuserd.cpp", "snapuserd_worker.cpp", ], cflags: [ "-Wall", Loading
fs_mgr/libsnapshot/cow_reader.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,29 @@ static void SHA256(const void*, size_t, uint8_t[]) { #endif } bool CowReader::InitForMerge(android::base::unique_fd&& fd) { owned_fd_ = std::move(fd); fd_ = owned_fd_.get(); auto pos = lseek(fd_.get(), 0, SEEK_END); if (pos < 0) { PLOG(ERROR) << "lseek end failed"; return false; } fd_size_ = pos; if (lseek(fd_.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } if (!android::base::ReadFully(fd_, &header_, sizeof(header_))) { PLOG(ERROR) << "read header failed"; return false; } return true; } bool CowReader::Parse(android::base::unique_fd&& fd, std::optional<uint64_t> label) { owned_fd_ = std::move(fd); return Parse(android::base::borrowed_fd{owned_fd_}, label); Loading
fs_mgr/libsnapshot/include/libsnapshot/cow_reader.h +5 −0 Original line number Diff line number Diff line Loading @@ -116,12 +116,15 @@ class ICowOpReverseIter { class CowReader : public ICowReader { public: CowReader(); ~CowReader() { owned_fd_ = {}; } // Parse the COW, optionally, up to the given label. If no label is // specified, the COW must have an intact footer. bool Parse(android::base::unique_fd&& fd, std::optional<uint64_t> label = {}); bool Parse(android::base::borrowed_fd fd, std::optional<uint64_t> label = {}); bool InitForMerge(android::base::unique_fd&& fd); bool GetHeader(CowHeader* header) override; bool GetFooter(CowFooter* footer) override; Loading @@ -146,6 +149,8 @@ class CowReader : public ICowReader { uint64_t total_data_ops() { return total_data_ops_; } void CloseCowFd() { owned_fd_ = {}; } private: bool ParseOps(std::optional<uint64_t> label); Loading
fs_mgr/libsnapshot/snapshot.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1265,7 +1265,7 @@ static bool DeleteDmDevice(const std::string& name, const std::chrono::milliseco LOG(ERROR) << "DeleteDevice timeout: " << name; return false; } std::this_thread::sleep_for(250ms); std::this_thread::sleep_for(400ms); } return true; Loading
fs_mgr/libsnapshot/snapuserd.cpp +30 −581 File changed.Preview size limit exceeded, changes collapsed. Show changes