/* ARGSUSED */ void lcollection_update_zone(lcollection_update_type_t ut, void(*update_notification_cb)(char *, char *, int, uint64_t, int)) { int changes; int64_t max_rss; uint64_t mcap; lcollection_t *lcol; rcid_t colid; mcap = get_zone_cap(GLOBAL_ZONEID); if (mcap != 0 && mcap != UINT64_MAX) { max_rss = ROUNDUP(mcap, 1024) / 1024; gz_capped = B_TRUE; } else { max_rss = UINT64_MAX / 1024; gz_capped = B_FALSE; } colid.rcid_type = RCIDT_ZONE; colid.rcid_val = GLOBAL_ZONEID; lcol = lcollection_insert_update(&colid, max_rss, GLOBAL_ZONENAME, &changes); if (update_notification_cb != NULL) update_notification_cb("zone", GLOBAL_ZONENAME, changes, max_rss, (lcol != NULL) ? lcol->lcol_mark : 0); }
static void update_zone(zone_entry_t *zent, void *walk_data) { void(*update_notification_cb)(char *, char *, int, uint64_t, int) = (void(*)(char *, char *, int, uint64_t, int))walk_data; int changes; int64_t max_rss; uint64_t mcap; lcollection_t *lcol; rcid_t colid; if (zone_getattr(zent->zid, ZONE_ATTR_PHYS_MCAP, &mcap, sizeof (mcap)) != -1 && mcap != 0) max_rss = ROUNDUP(mcap, 1024) / 1024; else max_rss = 0; if (zent->zid == GLOBAL_ZONEID) { if (max_rss > 0) gz_capped = B_TRUE; else gz_capped = B_FALSE; } colid.rcid_type = RCIDT_ZONE; colid.rcid_val = zent->zid; lcol = lcollection_insert_update(&colid, max_rss, zent->zname, &changes); if (update_notification_cb != NULL) update_notification_cb("zone", zent->zname, changes, max_rss, (lcol != NULL) ? lcol->lcol_mark : 0); }