/* * they are necessary regardless sysfs is disabled. */ void au_si_free(struct kobject *kobj) { struct au_sbinfo *sbinfo; char *locked __maybe_unused; /* debug only */ sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); AuDebugOn(!list_empty(&sbinfo->si_plink.head)); AuDebugOn(atomic_read(&sbinfo->si_nowait.nw_len)); au_rw_write_lock(&sbinfo->si_rwsem); au_br_free(sbinfo); au_rw_write_unlock(&sbinfo->si_rwsem); AuDebugOn(radix_tree_gang_lookup (&sbinfo->au_si_pid.tree, (void **)&locked, /*first_index*/PID_MAX_DEFAULT - 1, /*max_items*/sizeof(locked)/sizeof(*locked))); kfree(sbinfo->si_branch); kfree(sbinfo->au_si_pid.bitmap); mutex_destroy(&sbinfo->si_xib_mtx); AuRwDestroy(&sbinfo->si_rwsem); kfree(sbinfo); }
/* * they are necessary regardless sysfs is disabled. */ void au_si_free(struct kobject *kobj) { struct au_sbinfo *sbinfo; struct super_block *sb; sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); AuDebugOn(!list_empty(&sbinfo->si_plink.head)); AuDebugOn(sbinfo->si_plink_maint); sb = sbinfo->si_sb; si_write_lock(sb); au_xino_clr(sb); au_br_free(sbinfo); kfree(sbinfo->si_branch); mutex_destroy(&sbinfo->si_xib_mtx); si_write_unlock(sb); AuRwDestroy(&sbinfo->si_rwsem); kfree(sbinfo); }