/* 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);
}
예제 #2
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);
}