summaryrefslogtreecommitdiff
path: root/cmds/installd/installd.cpp
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2016-04-10 20:51:40 -0600
committer Jeff Sharkey <jsharkey@android.com> 2016-04-10 23:16:39 -0600
commit2f720f7ec5c9d0b91defc85878e7330b10f8e89a (patch)
treebc0eddacd84f65880b674bce350a5a4b5907c850 /cmds/installd/installd.cpp
parentcd582bb1180543d348a5ed412a64aa181fac638f (diff)
Use inode numbers for CE storage, fix sizes.
Certain operations, such as clearing/destroying app data, or just counting on-disk size, require us to know the CE storage directory of a particular app. To facilitate these operations, offer a method to get the inode of a CE directory, and accept that inode number for later operations. In previous releases, we started installing apps using a new directory-based layout, where all app code, unpacked native libraries, and optimized code is bundled together. So now we only have a single path to measure for code size. Start measuring both CE and DE storage data usage for apps, and tweak the reporting so that empty cache/data directories actually show up as "0 bytes". Fix bugs in disk usage counting, since st_blksize has no bearing on the allocated disk space. Also don't double-count "." and ".." directories when measuring storage. Bug: 27828915, 27197819 Change-Id: I350b951f5c24165edb253ac663c9aae020c24dc9
Diffstat (limited to 'cmds/installd/installd.cpp')
-rw-r--r--cmds/installd/installd.cpp35
1 files changed, 23 insertions, 12 deletions
diff --git a/cmds/installd/installd.cpp b/cmds/installd/installd.cpp
index de3f54ab6d..c7f4ffcdaa 100644
--- a/cmds/installd/installd.cpp
+++ b/cmds/installd/installd.cpp
@@ -207,13 +207,13 @@ static int do_migrate_app_data(char **arg, char reply[REPLY_MAX] ATTRIBUTE_UNUSE
}
static int do_clear_app_data(char **arg, char reply[REPLY_MAX] ATTRIBUTE_UNUSED) {
- /* const char *uuid, const char *pkgname, userid_t userid, int flags */
- return clear_app_data(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]));
+ /* const char *uuid, const char *pkgname, userid_t userid, int flags, ino_t ce_data_inode */
+ return clear_app_data(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]), atol(arg[4]));
}
static int do_destroy_app_data(char **arg, char reply[REPLY_MAX] ATTRIBUTE_UNUSED) {
- /* const char *uuid, const char *pkgname, userid_t userid, int flags */
- return destroy_app_data(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]));
+ /* const char *uuid, const char *pkgname, userid_t userid, int flags, ino_t ce_data_inode */
+ return destroy_app_data(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]), atol(arg[4]));
}
// We use otapreopt_chroot to get into the chroot.
@@ -303,11 +303,10 @@ static int do_get_app_size(char **arg, char reply[REPLY_MAX]) {
int64_t asecsize = 0;
int res = 0;
- /* const char *uuid, const char *pkgname, userid_t userid, int flags,
- const char *apkpath, const char *libdirpath, const char *fwdlock_apkpath,
- const char *asecpath, const char *instruction_set */
- res = get_app_size(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]), arg[4], arg[5],
- arg[6], arg[7], arg[8], &codesize, &datasize, &cachesize, &asecsize);
+ /* const char *uuid, const char *pkgname, int userid, int flags, ino_t ce_data_inode,
+ const char* code_path */
+ res = get_app_size(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]), atol(arg[4]),
+ arg[5], &codesize, &datasize, &cachesize, &asecsize);
/*
* Each int64_t can take up 22 characters printed out. Make sure it
@@ -318,6 +317,17 @@ static int do_get_app_size(char **arg, char reply[REPLY_MAX]) {
return res;
}
+static int do_get_app_data_inode(char **arg, char reply[REPLY_MAX]) {
+ ino_t inode = 0;
+ int res = 0;
+
+ /* const char *uuid, const char *pkgname, int userid, int flags */
+ res = get_app_data_inode(parse_null(arg[0]), arg[1], atoi(arg[2]), atoi(arg[3]), &inode);
+
+ snprintf(reply, REPLY_MAX, "%" PRId64, inode);
+ return res;
+}
+
static int do_move_complete_app(char **arg, char reply[REPLY_MAX] ATTRIBUTE_UNUSED) {
/* const char* from_uuid, const char *to_uuid, const char *package_name,
const char *data_app_name, appid_t appid, const char* seinfo,
@@ -393,10 +403,11 @@ struct cmdinfo cmds[] = {
{ "create_app_data", 7, do_create_app_data },
{ "restorecon_app_data", 6, do_restorecon_app_data },
{ "migrate_app_data", 4, do_migrate_app_data },
- { "clear_app_data", 4, do_clear_app_data },
- { "destroy_app_data", 4, do_destroy_app_data },
+ { "clear_app_data", 5, do_clear_app_data },
+ { "destroy_app_data", 5, do_destroy_app_data },
{ "move_complete_app", 7, do_move_complete_app },
- { "get_app_size", 9, do_get_app_size },
+ { "get_app_size", 6, do_get_app_size },
+ { "get_app_data_inode", 4, do_get_app_data_inode },
{ "dexopt", 9, do_dexopt },
{ "markbootcomplete", 1, do_mark_boot_complete },