From c1c0ebd597fd6db650197255bc1248c9f60afad8 Mon Sep 17 00:00:00 2001 From: sl108498 Date: Thu, 14 Dec 2006 15:46:12 -0800 Subject: 6354498 rctl_local_replace_cb needs to remove new value when deletion fails 6504130 pool service not enabled when zone with tmp pool not booted before reboot 6504424 halting zones in parallel can fail, unable to unconfigure network interfaces --- usr/src/uts/common/os/rctl.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'usr/src/uts/common/os/rctl.c') diff --git a/usr/src/uts/common/os/rctl.c b/usr/src/uts/common/os/rctl.c index c0479005ea..026d6b13ed 100644 --- a/usr/src/uts/common/os/rctl.c +++ b/usr/src/uts/common/os/rctl.c @@ -1693,6 +1693,17 @@ rctl_local_replace_cb(rctl_hndl_t hndl, struct proc *p, rctl_entity_p_t *e, rctl_t *rctl, rctl_val_t *oval, rctl_val_t *nval) { int ret; + rctl_val_t *tmp; + + /* Verify that old will be delete-able */ + tmp = rctl_val_list_find(&rctl->rc_values, oval); + if (tmp == NULL) + return (ESRCH); + /* + * Caller should verify that value being deleted is not the + * system value. + */ + ASSERT(tmp->rcv_privilege != RCPRIV_SYSTEM); /* * rctl_local_insert_cb() does the job of flagging an error @@ -1706,7 +1717,9 @@ rctl_local_replace_cb(rctl_hndl_t hndl, struct proc *p, rctl_entity_p_t *e, if (ret = rctl_local_insert_cb(hndl, p, e, rctl, NULL, nval)) return (ret); - return (rctl_local_delete_cb(hndl, p, e, rctl, NULL, oval)); + ret = rctl_local_delete_cb(hndl, p, e, rctl, NULL, oval); + ASSERT(ret == 0); + return (0); } /* -- cgit v1.2.3