From 55c0da3208354ea2a8243c0c6f91aa4e957b8703 Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Mon, 6 Jan 2020 14:04:39 +0100 Subject: installd: add quota API for project IDs. Add an API to retrieve quota usage on filesystems that support project ID quotas. Bug: 146419093 Test: manual test, more tests coming Change-Id: Ic997e398f0eb1db85768155a779b3a81a060dff3 --- cmds/installd/QuotaUtils.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'cmds/installd/QuotaUtils.cpp') diff --git a/cmds/installd/QuotaUtils.cpp b/cmds/installd/QuotaUtils.cpp index b238dd36e3..f2abf3aea3 100644 --- a/cmds/installd/QuotaUtils.cpp +++ b/cmds/installd/QuotaUtils.cpp @@ -97,6 +97,26 @@ int64_t GetOccupiedSpaceForUid(const std::string& uuid, uid_t uid) { } } +int64_t GetOccupiedSpaceForProjectId(const std::string& uuid, int projectId) { + const std::string device = FindQuotaDeviceForUuid(uuid); + if (device == "") { + return -1; + } + struct dqblk dq; + if (quotactl(QCMD(Q_GETQUOTA, PRJQUOTA), device.c_str(), projectId, + reinterpret_cast(&dq)) != 0) { + if (errno != ESRCH) { + PLOG(ERROR) << "Failed to quotactl " << device << " for Project ID " << projectId; + } + return -1; + } else { +#if MEASURE_DEBUG + LOG(DEBUG) << "quotactl() for Project ID " << projectId << " " << dq.dqb_curspace; +#endif + return dq.dqb_curspace; + } +} + int64_t GetOccupiedSpaceForGid(const std::string& uuid, gid_t gid) { const std::string device = FindQuotaDeviceForUuid(uuid); if (device == "") { -- cgit v1.2.3-59-g8ed1b