diff options
5 files changed, 19 insertions, 7 deletions
diff --git a/core/java/android/os/incremental/IncrementalFileSystemControlParcel.aidl b/core/java/android/os/incremental/IncrementalFileSystemControlParcel.aidl index 6018ad1efc4a..483919e2bae4 100644 --- a/core/java/android/os/incremental/IncrementalFileSystemControlParcel.aidl +++ b/core/java/android/os/incremental/IncrementalFileSystemControlParcel.aidl @@ -25,4 +25,5 @@ parcelable IncrementalFileSystemControlParcel { ParcelFileDescriptor cmd; ParcelFileDescriptor pendingReads; ParcelFileDescriptor log; + @nullable ParcelFileDescriptor blocksWritten; } diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp index dde70caa797f..c9c5489a50df 100644 --- a/services/incremental/IncrementalService.cpp +++ b/services/incremental/IncrementalService.cpp @@ -503,7 +503,9 @@ StorageId IncrementalService::createStorage( int cmd = controlParcel.cmd.release().release(); int pendingReads = controlParcel.pendingReads.release().release(); int logs = controlParcel.log.release().release(); - control = mIncFs->createControl(cmd, pendingReads, logs); + int blocksWritten = + controlParcel.blocksWritten ? controlParcel.blocksWritten->release().release() : -1; + control = mIncFs->createControl(cmd, pendingReads, logs, blocksWritten); } std::unique_lock l(mLock); @@ -1381,7 +1383,9 @@ bool IncrementalService::mountExistingImage(std::string_view root) { int cmd = controlParcel.cmd.release().release(); int pendingReads = controlParcel.pendingReads.release().release(); int logs = controlParcel.log.release().release(); - IncFsMount::Control control = mIncFs->createControl(cmd, pendingReads, logs); + int blocksWritten = + controlParcel.blocksWritten ? controlParcel.blocksWritten->release().release() : -1; + IncFsMount::Control control = mIncFs->createControl(cmd, pendingReads, logs, blocksWritten); auto ifs = std::make_shared<IncFsMount>(std::string(root), -1, std::move(control), *this); @@ -1516,6 +1520,9 @@ void IncrementalService::prepareDataLoaderLocked(IncFsMount& ifs, DataLoaderPara fsControlParcel.incremental->cmd.reset(dup(ifs.control.cmd())); fsControlParcel.incremental->pendingReads.reset(dup(ifs.control.pendingReads())); fsControlParcel.incremental->log.reset(dup(ifs.control.logs())); + if (ifs.control.blocksWritten() >= 0) { + fsControlParcel.incremental->blocksWritten.emplace(dup(ifs.control.blocksWritten())); + } fsControlParcel.service = new IncrementalServiceConnector(*this, ifs.mountId); ifs.dataLoaderStub = diff --git a/services/incremental/ServiceWrappers.cpp b/services/incremental/ServiceWrappers.cpp index b1521b0d4e27..6fabc589cf95 100644 --- a/services/incremental/ServiceWrappers.cpp +++ b/services/incremental/ServiceWrappers.cpp @@ -144,8 +144,9 @@ public: } } Control openMount(std::string_view path) const final { return incfs::open(path); } - Control createControl(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs) const final { - return incfs::createControl(cmd, pendingReads, logs); + Control createControl(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs, + IncFsFd blocksWritten) const final { + return incfs::createControl(cmd, pendingReads, logs, blocksWritten); } ErrorCode makeFile(const Control& control, std::string_view path, int mode, FileId id, incfs::NewFileParams params) const final { diff --git a/services/incremental/ServiceWrappers.h b/services/incremental/ServiceWrappers.h index fad8d67e0da7..71fd3acc6489 100644 --- a/services/incremental/ServiceWrappers.h +++ b/services/incremental/ServiceWrappers.h @@ -85,7 +85,8 @@ public: virtual ~IncFsWrapper() = default; virtual void listExistingMounts(const ExistingMountCallback& cb) const = 0; virtual Control openMount(std::string_view path) const = 0; - virtual Control createControl(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs) const = 0; + virtual Control createControl(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs, + IncFsFd blocksWritten) const = 0; virtual ErrorCode makeFile(const Control& control, std::string_view path, int mode, FileId id, incfs::NewFileParams params) const = 0; virtual ErrorCode makeDir(const Control& control, std::string_view path, int mode) const = 0; diff --git a/services/incremental/test/IncrementalServiceTest.cpp b/services/incremental/test/IncrementalServiceTest.cpp index 47b9051970e4..f0deba7db01c 100644 --- a/services/incremental/test/IncrementalServiceTest.cpp +++ b/services/incremental/test/IncrementalServiceTest.cpp @@ -285,7 +285,9 @@ class MockIncFs : public IncFsWrapper { public: MOCK_CONST_METHOD1(listExistingMounts, void(const ExistingMountCallback& cb)); MOCK_CONST_METHOD1(openMount, Control(std::string_view path)); - MOCK_CONST_METHOD3(createControl, Control(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs)); + MOCK_CONST_METHOD4(createControl, + Control(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs, + IncFsFd blocksWritten)); MOCK_CONST_METHOD5(makeFile, ErrorCode(const Control& control, std::string_view path, int mode, FileId id, NewFileParams params)); @@ -355,7 +357,7 @@ public: static constexpr auto kPendingReadsFd = 42; Control openMountForHealth(std::string_view) { - return UniqueControl(IncFs_CreateControl(-1, kPendingReadsFd, -1)); + return UniqueControl(IncFs_CreateControl(-1, kPendingReadsFd, -1, -1)); } RawMetadata getMountInfoMetadata(const Control& control, std::string_view path) { |