return avtab_insert_node(h, hvalue, prev, key, datum);
 }
 
-struct avtab_datum *avtab_search(struct avtab *h, const struct avtab_key *key)
-{
-       int hvalue;
-       struct avtab_node *cur;
-       u16 specified = key->specified & ~(AVTAB_ENABLED|AVTAB_ENABLED_OLD);
-
-       if (!h || !h->nslot)
-               return NULL;
-
-       hvalue = avtab_hash(key, h->mask);
-       for (cur = h->htable[hvalue]; cur;
-            cur = cur->next) {
-               if (key->source_type == cur->key.source_type &&
-                   key->target_type == cur->key.target_type &&
-                   key->target_class == cur->key.target_class &&
-                   (specified & cur->key.specified))
-                       return &cur->datum;
-
-               if (key->source_type < cur->key.source_type)
-                       break;
-               if (key->source_type == cur->key.source_type &&
-                   key->target_type < cur->key.target_type)
-                       break;
-               if (key->source_type == cur->key.source_type &&
-                   key->target_type == cur->key.target_type &&
-                   key->target_class < cur->key.target_class)
-                       break;
-       }
-
-       return NULL;
-}
-
 /* This search function returns a node pointer, and can be used in
  * conjunction with avtab_search_next_node()
  */
 
 void avtab_init(struct avtab *h);
 int avtab_alloc(struct avtab *, u32);
 int avtab_alloc_dup(struct avtab *new, const struct avtab *orig);
-struct avtab_datum *avtab_search(struct avtab *h, const struct avtab_key *k);
 void avtab_destroy(struct avtab *h);
 void avtab_hash_eval(struct avtab *h, const char *tag);
 
 
         * cond_te_avtab.
         */
        if (k->specified & AVTAB_TYPE) {
-               if (avtab_search(&p->te_avtab, k)) {
+               if (avtab_search_node(&p->te_avtab, k)) {
                        pr_err("SELinux: type rule already exists outside of a conditional.\n");
                        return -EINVAL;
                }
                                }
                        }
                } else {
-                       if (avtab_search(&p->te_cond_avtab, k)) {
+                       if (avtab_search_node(&p->te_cond_avtab, k)) {
                                pr_err("SELinux: conflicting type rules when adding type rule for true.\n");
                                return -EINVAL;
                        }
 
        struct context *scontext, *tcontext, newcontext;
        struct sidtab_entry *sentry, *tentry;
        struct avtab_key avkey;
-       struct avtab_datum *avdatum;
-       struct avtab_node *node;
+       struct avtab_node *avnode, *node;
        u16 tclass;
        int rc = 0;
        bool sock;
        avkey.target_type = tcontext->type;
        avkey.target_class = tclass;
        avkey.specified = specified;
-       avdatum = avtab_search(&policydb->te_avtab, &avkey);
+       avnode = avtab_search_node(&policydb->te_avtab, &avkey);
 
        /* If no permanent rule, also check for enabled conditional rules */
-       if (!avdatum) {
+       if (!avnode) {
                node = avtab_search_node(&policydb->te_cond_avtab, &avkey);
                for (; node; node = avtab_search_node_next(node, specified)) {
                        if (node->key.specified & AVTAB_ENABLED) {
-                               avdatum = &node->datum;
+                               avnode = node;
                                break;
                        }
                }
        }
 
-       if (avdatum) {
+       if (avnode) {
                /* Use the type from the type transition/member/change rule. */
-               newcontext.type = avdatum->u.data;
+               newcontext.type = avnode->datum.u.data;
        }
 
        /* if we have a objname this is a file trans check so check those rules */