Remove from preloads/file_cache when clearing the cache
Test: pm trim-caches 50G internal
Bug: 31008665
Change-Id: If74f4d3c2d838ecb924aba84ad76293af34089bc
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp
index ede31fc..5833901 100644
--- a/cmds/installd/InstalldNativeService.cpp
+++ b/cmds/installd/InstalldNativeService.cpp
@@ -961,6 +961,10 @@
add_cache_files(cache,
StringPrintf("%s/Android/data", create_data_media_path(uuid_, user).c_str()));
}
+ // Add files from /data/preloads/file_cache
+ if (uuid == nullptr) {
+ add_preloads_file_cache(cache, uuid_);
+ }
ATRACE_END();
ATRACE_BEGIN("clear");
diff --git a/cmds/installd/utils.cpp b/cmds/installd/utils.cpp
index 0b1cd7e..32c789d 100644
--- a/cmds/installd/utils.cpp
+++ b/cmds/installd/utils.cpp
@@ -1003,6 +1003,21 @@
closedir(d);
}
+void add_preloads_file_cache(cache_t* cache, const char* volume_uuid) {
+ char dirname[PATH_MAX];
+ DIR* subdir;
+ auto cache_path = StringPrintf("%s/preloads/file_cache", create_data_path(volume_uuid).c_str());
+ strcpy(dirname, cache_path.c_str());
+ CACHE_NOISY(ALOGI("add_preloads_file_cache: dirname=%s\n", dirname));
+ subdir = opendir(dirname);
+ if (subdir != NULL) {
+ size_t dirnameLen = strlen(dirname);
+ _add_cache_files(cache, NULL, dirname, subdir, dirname, dirname + dirnameLen,
+ PATH_MAX - dirnameLen);
+ closedir(subdir);
+ }
+}
+
static char *create_dir_path(char path[PATH_MAX], cache_dir_t* dir)
{
char *pos = path;
diff --git a/cmds/installd/utils.h b/cmds/installd/utils.h
index 5e396c7..9195cb8 100644
--- a/cmds/installd/utils.h
+++ b/cmds/installd/utils.h
@@ -143,6 +143,8 @@
void add_cache_files(cache_t* cache, const std::string& data_path);
+void add_preloads_file_cache(cache_t* cache, const char* volume_uuid);
+
void clear_cache_files(const std::string& data_path, cache_t* cache, int64_t free_size);
void finish_cache_collection(cache_t* cache);