From cb5bef89d1861f456f7e0fec4efcfd6389546023 Mon Sep 17 00:00:00 2001 From: Dhaval Giani Date: Tue, 10 Mar 2009 12:55:56 -0700 Subject: [PATCH] --- yaml --- r: 132179 b: refs/heads/master c: be50b8342dead8cacf57d4839240106b225d31f5 h: refs/heads/master i: 132177: 5fb89f85cd78b714760c23d6acf4305ba484a76d 132175: 8c148baf9490fb4da1c9fbd0c181c924b7662447 v: v3 --- [refs] | 2 +- trunk/kernel/user.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 994f816c296e..de88eca34997 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d58ab5cf09679d8cb4824e22cae900c0eab5ab31 +refs/heads/master: be50b8342dead8cacf57d4839240106b225d31f5 diff --git a/trunk/kernel/user.c b/trunk/kernel/user.c index 6a9b696128c8..fbb300e6191f 100644 --- a/trunk/kernel/user.c +++ b/trunk/kernel/user.c @@ -286,14 +286,12 @@ int __init uids_sysfs_init(void) /* work function to remove sysfs directory for a user and free up * corresponding structures. */ -static void remove_user_sysfs_dir(struct work_struct *w) +static void cleanup_user_struct(struct work_struct *w) { struct user_struct *up = container_of(w, struct user_struct, work); unsigned long flags; int remove_user = 0; - if (up->user_ns != &init_user_ns) - return; /* Make uid_hash_remove() + sysfs_remove_file() + kobject_del() * atomic. */ @@ -312,9 +310,11 @@ static void remove_user_sysfs_dir(struct work_struct *w) if (!remove_user) goto done; - kobject_uevent(&up->kobj, KOBJ_REMOVE); - kobject_del(&up->kobj); - kobject_put(&up->kobj); + if (up->user_ns == &init_user_ns) { + kobject_uevent(&up->kobj, KOBJ_REMOVE); + kobject_del(&up->kobj); + kobject_put(&up->kobj); + } sched_destroy_user(up); key_put(up->uid_keyring); @@ -335,7 +335,7 @@ static void free_user(struct user_struct *up, unsigned long flags) atomic_inc(&up->__count); spin_unlock_irqrestore(&uidhash_lock, flags); - INIT_WORK(&up->work, remove_user_sysfs_dir); + INIT_WORK(&up->work, cleanup_user_struct); schedule_work(&up->work); }