X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fuser.c;h=155084e202ab53ed029e1d01bb72260d6365c84a;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=bcbd0b3631f4a15b36fc1bbeea75837d8ec207f9;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/kernel/user.c b/kernel/user.c index bcbd0b363..155084e20 100644 --- a/kernel/user.c +++ b/kernel/user.c @@ -105,19 +105,15 @@ void free_uid(struct user_struct *up) { unsigned long flags; - if (!up) - return; - local_irq_save(flags); - if (atomic_dec_and_lock(&up->__count, &uidhash_lock)) { + if (up && atomic_dec_and_lock(&up->__count, &uidhash_lock)) { uid_hash_remove(up); - spin_unlock_irqrestore(&uidhash_lock, flags); key_put(up->uid_keyring); key_put(up->session_keyring); kmem_cache_free(uid_cachep, up); - } else { - local_irq_restore(flags); + spin_unlock(&uidhash_lock); } + local_irq_restore(flags); } struct user_struct * alloc_uid(xid_t xid, uid_t uid)