diff -pruN -X linux-2.6.18.1/Documentation/dontdiff linux-2.6.18.1-orig/drivers/cabi/cabi_account.c linux-2.6.18.1/drivers/cabi/cabi_account.c --- linux-2.6.18.1-orig/drivers/cabi/cabi_account.c 2007-08-21 10:53:21.254945320 +0900 +++ linux-2.6.18.1/drivers/cabi/cabi_account.c 2007-08-20 16:58:37.814405806 +0900 @@ -437,9 +437,6 @@ cabi_account_destroy(unsigned long cabi_ /* process is still attached. */ return CABI_EATTACHED; - /* destroy timer */ - cabi_replenish_timer_cancel(cabi); - /* return capacity */ cpu = cabi->cpu_id; if (cabi->cpu_capacity >= cabi_account_current_capacity[cpu]) { @@ -735,6 +732,10 @@ cabi_account_detach(struct task_struct * INIT_LIST_HEAD(&rs_proc->rs_proc_list); free(rs_proc); } + + if (list_empty(&cabi->cpu_proc_list)) + cabi_replenish_timer_cancel(cabi); + /* detach resource set from task */ LVAL_TASK_ACCOUNT(tsk) = NULL_ACCOUNT; diff -pruN -X linux-2.6.18.1/Documentation/dontdiff linux-2.6.18.1-orig/drivers/cabi/cabi_procfs.c linux-2.6.18.1/drivers/cabi/cabi_procfs.c --- linux-2.6.18.1-orig/drivers/cabi/cabi_procfs.c 2007-08-21 10:53:21.262944103 +0900 +++ linux-2.6.18.1/drivers/cabi/cabi_procfs.c 2007-08-20 16:30:34.596540299 +0900 @@ -202,9 +202,15 @@ void cabi_proc_account_destroy(cabi_account_t cabi) { char buf[16]; + int i; cabi_debug ("cabi_proc_account_destroy: cabi(%d)", (int) cabi->cabi_id); + + for (i = 0; i < ENTRIES; i++) + remove_proc_entry(CABI_PROC_ENTRY[i].name, + cabi_id_dir[cabi->cabi_id]); + sprintf(buf, "%d", (int) cabi->cabi_id); remove_proc_entry(buf, proc_cabi_dir); }