Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c3fad936acaf87b75055b95be781437e97d787f
Commit:     1c3fad936acaf87b75055b95be781437e97d787f
Parent:     b64397e0b40e75b619aeef9a1fa21f79f801a3e8
Author:     Paul Moore <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 29 08:37:57 2008 -0500
Committer:  James Morris <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 08:17:18 2008 +1100

    NetLabel: Consolidate the LSM domain mapping/hashing locks
    
    Currently we use two separate spinlocks to protect both the hash/mapping 
table
    and the default entry.  This could be considered a bit foolish because it 
adds
    complexity without offering any real performance advantage.  This patch
    removes the dedicated default spinlock and protects the default entry with 
the
    hash/mapping table spinlock.
    
    Signed-off-by: Paul Moore <[EMAIL PROTECTED]>
    Signed-off-by: James Morris <[EMAIL PROTECTED]>
---
 net/netlabel/netlabel_domainhash.c |   30 +++++++++---------------------
 1 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/net/netlabel/netlabel_domainhash.c 
b/net/netlabel/netlabel_domainhash.c
index 1f8f7ac..9a8ea01 100644
--- a/net/netlabel/netlabel_domainhash.c
+++ b/net/netlabel/netlabel_domainhash.c
@@ -54,9 +54,6 @@ struct netlbl_domhsh_tbl {
  * hash table should be okay */
 static DEFINE_SPINLOCK(netlbl_domhsh_lock);
 static struct netlbl_domhsh_tbl *netlbl_domhsh = NULL;
-
-/* Default domain mapping */
-static DEFINE_SPINLOCK(netlbl_domhsh_def_lock);
 static struct netlbl_dom_map *netlbl_domhsh_def = NULL;
 
 /*
@@ -239,24 +236,22 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
        INIT_RCU_HEAD(&entry->rcu);
 
        rcu_read_lock();
+       spin_lock(&netlbl_domhsh_lock);
        if (entry->domain != NULL) {
                bkt = netlbl_domhsh_hash(entry->domain);
-               spin_lock(&netlbl_domhsh_lock);
                if (netlbl_domhsh_search(entry->domain) == NULL)
                        list_add_tail_rcu(&entry->list,
                                    &rcu_dereference(netlbl_domhsh)->tbl[bkt]);
                else
                        ret_val = -EEXIST;
-               spin_unlock(&netlbl_domhsh_lock);
        } else {
                INIT_LIST_HEAD(&entry->list);
-               spin_lock(&netlbl_domhsh_def_lock);
                if (rcu_dereference(netlbl_domhsh_def) == NULL)
                        rcu_assign_pointer(netlbl_domhsh_def, entry);
                else
                        ret_val = -EEXIST;
-               spin_unlock(&netlbl_domhsh_def_lock);
        }
+       spin_unlock(&netlbl_domhsh_lock);
        audit_buf = netlbl_audit_start_common(AUDIT_MAC_MAP_ADD, audit_info);
        if (audit_buf != NULL) {
                audit_log_format(audit_buf,
@@ -337,23 +332,16 @@ int netlbl_domhsh_remove(const char *domain, struct 
netlbl_audit *audit_info)
                                           entry->domain);
                break;
        }
-       if (entry != rcu_dereference(netlbl_domhsh_def)) {
-               spin_lock(&netlbl_domhsh_lock);
-               if (entry->valid) {
-                       entry->valid = 0;
+       spin_lock(&netlbl_domhsh_lock);
+       if (entry->valid) {
+               entry->valid = 0;
+               if (entry != rcu_dereference(netlbl_domhsh_def))
                        list_del_rcu(&entry->list);
-                       ret_val = 0;
-               }
-               spin_unlock(&netlbl_domhsh_lock);
-       } else {
-               spin_lock(&netlbl_domhsh_def_lock);
-               if (entry->valid) {
-                       entry->valid = 0;
+               else
                        rcu_assign_pointer(netlbl_domhsh_def, NULL);
-                       ret_val = 0;
-               }
-               spin_unlock(&netlbl_domhsh_def_lock);
+               ret_val = 0;
        }
+       spin_unlock(&netlbl_domhsh_lock);
 
        audit_buf = netlbl_audit_start_common(AUDIT_MAC_MAP_DEL, audit_info);
        if (audit_buf != NULL) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to