From 1f0e9e7eb35e13d7a680dcfe99b982b639289bc8 Mon Sep 17 00:00:00 2001 From: Dmitry Kasatkin Date: Wed, 8 Feb 2012 14:15:42 -0500 Subject: [PATCH] --- yaml --- r: 329107 b: refs/heads/master c: a10bf26b2f53242836e9362c6c9c857b627b82a9 h: refs/heads/master i: 329105: f66f9a6a46eb2436f469f113943006740514e5c2 329103: 62012a6d308713f4f7ebdeb19aa808431b7ce3c2 v: v3 --- [refs] | 2 +- trunk/security/integrity/iint.c | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 6de19c1be4a1..766ebd0e3da7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bf2276d10ce58ff44ab8857266a6718024496af6 +refs/heads/master: a10bf26b2f53242836e9362c6c9c857b627b82a9 diff --git a/trunk/security/integrity/iint.c b/trunk/security/integrity/iint.c index c91a436e13ac..d82a5a13d855 100644 --- a/trunk/security/integrity/iint.c +++ b/trunk/security/integrity/iint.c @@ -22,7 +22,7 @@ #include "integrity.h" static struct rb_root integrity_iint_tree = RB_ROOT; -static DEFINE_SPINLOCK(integrity_iint_lock); +static DEFINE_RWLOCK(integrity_iint_lock); static struct kmem_cache *iint_cache __read_mostly; int iint_initialized; @@ -35,8 +35,6 @@ static struct integrity_iint_cache *__integrity_iint_find(struct inode *inode) struct integrity_iint_cache *iint; struct rb_node *n = integrity_iint_tree.rb_node; - assert_spin_locked(&integrity_iint_lock); - while (n) { iint = rb_entry(n, struct integrity_iint_cache, rb_node); @@ -63,9 +61,9 @@ struct integrity_iint_cache *integrity_iint_find(struct inode *inode) if (!IS_IMA(inode)) return NULL; - spin_lock(&integrity_iint_lock); + read_lock(&integrity_iint_lock); iint = __integrity_iint_find(inode); - spin_unlock(&integrity_iint_lock); + read_unlock(&integrity_iint_lock); return iint; } @@ -100,7 +98,7 @@ struct integrity_iint_cache *integrity_inode_get(struct inode *inode) if (!iint) return NULL; - spin_lock(&integrity_iint_lock); + write_lock(&integrity_iint_lock); p = &integrity_iint_tree.rb_node; while (*p) { @@ -119,7 +117,7 @@ struct integrity_iint_cache *integrity_inode_get(struct inode *inode) rb_link_node(node, parent, p); rb_insert_color(node, &integrity_iint_tree); - spin_unlock(&integrity_iint_lock); + write_unlock(&integrity_iint_lock); return iint; } @@ -136,10 +134,10 @@ void integrity_inode_free(struct inode *inode) if (!IS_IMA(inode)) return; - spin_lock(&integrity_iint_lock); + write_lock(&integrity_iint_lock); iint = __integrity_iint_find(inode); rb_erase(&iint->rb_node, &integrity_iint_tree); - spin_unlock(&integrity_iint_lock); + write_unlock(&integrity_iint_lock); iint_free(iint); }