core/cgroup: for non-cached attrs, don't return ENODATA blindly

Follow-up for f17b07f4d7

Hope I won't break this thing again...
This commit is contained in:
Mike Yuan
2023-12-02 00:13:46 +00:00
committed by Luca Boccassi
parent 26747824fd
commit a8aed6a9b6
+11 -10
View File
@@ -4065,7 +4065,7 @@ int unit_get_memory_accounting(Unit *u, CGroupMemoryAccountingMetric metric, uin
if (!u->cgroup_path)
/* If the cgroup is already gone, we try to find the last cached value. */
goto cache;
goto finish;
/* The root cgroup doesn't expose this information. */
if (unit_has_host_root_cgroup(u))
@@ -4085,17 +4085,18 @@ int unit_get_memory_accounting(Unit *u, CGroupMemoryAccountingMetric metric, uin
return r;
updated = r >= 0;
cache:
if (metric > _CGROUP_MEMORY_ACCOUNTING_METRIC_CACHED_LAST)
return -ENODATA;
finish:
if (metric <= _CGROUP_MEMORY_ACCOUNTING_METRIC_CACHED_LAST) {
uint64_t *last = &u->memory_accounting_last[metric];
uint64_t *last = &u->memory_accounting_last[metric];
if (updated)
*last = bytes;
else if (*last != UINT64_MAX)
bytes = *last;
else
return -ENODATA;
if (updated)
*last = bytes;
else if (*last != UINT64_MAX)
bytes = *last;
else
} else if (!updated)
return -ENODATA;
if (ret)