diff options
Diffstat (limited to 'cmds/installd/CacheTracker.cpp')
-rw-r--r-- | cmds/installd/CacheTracker.cpp | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/cmds/installd/CacheTracker.cpp b/cmds/installd/CacheTracker.cpp index a7242c35cf..8b868fb584 100644 --- a/cmds/installd/CacheTracker.cpp +++ b/cmds/installd/CacheTracker.cpp @@ -19,13 +19,13 @@ #include "CacheTracker.h" #include <fts.h> -#include <sys/quota.h> #include <sys/xattr.h> #include <utils/Trace.h> #include <android-base/logging.h> #include <android-base/stringprintf.h> +#include "QuotaUtils.h" #include "utils.h" using android::base::StringPrintf; @@ -33,9 +33,13 @@ using android::base::StringPrintf; namespace android { namespace installd { -CacheTracker::CacheTracker(userid_t userId, appid_t appId, const std::string& quotaDevice) : - cacheUsed(0), cacheQuota(0), mUserId(userId), mAppId(appId), mQuotaDevice(quotaDevice), - mItemsLoaded(false) { +CacheTracker::CacheTracker(userid_t userId, appid_t appId, const std::string& uuid) + : cacheUsed(0), + cacheQuota(0), + mUserId(userId), + mAppId(appId), + mItemsLoaded(false), + mUuid(uuid) { } CacheTracker::~CacheTracker() { @@ -72,26 +76,18 @@ void CacheTracker::loadStats() { bool CacheTracker::loadQuotaStats() { int cacheGid = multiuser_get_cache_gid(mUserId, mAppId); int extCacheGid = multiuser_get_ext_cache_gid(mUserId, mAppId); - if (!mQuotaDevice.empty() && cacheGid != -1 && extCacheGid != -1) { - struct dqblk dq; - if (quotactl(QCMD(Q_GETQUOTA, GRPQUOTA), mQuotaDevice.c_str(), cacheGid, - reinterpret_cast<char*>(&dq)) != 0) { - if (errno != ESRCH) { - PLOG(ERROR) << "Failed to quotactl " << mQuotaDevice << " for GID " << cacheGid; - } - return false; + if (IsQuotaSupported(mUuid) && cacheGid != -1 && extCacheGid != -1) { + int64_t space; + if ((space = GetOccupiedSpaceForGid(mUuid, cacheGid)) != -1) { + cacheUsed += space; } else { - cacheUsed += dq.dqb_curspace; + return false; } - if (quotactl(QCMD(Q_GETQUOTA, GRPQUOTA), mQuotaDevice.c_str(), extCacheGid, - reinterpret_cast<char*>(&dq)) != 0) { - if (errno != ESRCH) { - PLOG(ERROR) << "Failed to quotactl " << mQuotaDevice << " for GID " << cacheGid; - } - return false; + if ((space = GetOccupiedSpaceForGid(mUuid, extCacheGid)) != -1) { + cacheUsed += space; } else { - cacheUsed += dq.dqb_curspace; + return false; } return true; } else { |