Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55c0da32 authored by Martijn Coenen's avatar Martijn Coenen
Browse files

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
parent d17f197e
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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<char*>(&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 == "") {
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ int64_t GetOccupiedSpaceForUid(const std::string& uuid, uid_t uid);
/* Get the current occupied space in bytes for a gid or -1 if fails */
int64_t GetOccupiedSpaceForGid(const std::string& uuid, gid_t gid);

/* Get the current occupied space in bytes for a project id or -1 if fails */
int64_t GetOccupiedSpaceForProjectId(const std::string& uuid, int projectId);
}  // namespace installd
}  // namespace android