lkml.org 
[lkml]   [2008]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: sysfs: duplicate filename '74' can not be created
On Tue, Mar 04, 2008 at 07:09:40PM +0300, Alexey Dobriyan wrote:
> [Cc'ing /sys/kernel/uids guys]
>

[Also adding gregkh to the cc :)]

> > Mar 3 13:50:01 helena kernel: sysfs: duplicate filename '74' can not be created
> > Mar 3 13:50:01 helena kernel: WARNING: at fs/sysfs/dir.c:424 sysfs_add_one()
> > Mar 3 13:50:01 helena kernel: Pid: 21911, comm: sshd Not tainted 2.6.24.3 #1
>
> I see only one suspicious place: KOBJ_ADD is sent even if sysfs file
> creation failed and kobject is happily removed. But this almost
> certainly separate bug.
>
>
>
> You can try this debugging patch. Post several first consecutive messages.
> [crosses fingers]
>
> --- a/kernel/user.c
> +++ b/kernel/user.c
> @@ -179,8 +179,11 @@ static int user_kobject_create(struct user_struct *up)
> goto done;
>
> error = sysfs_create_file(kobj, &up->user_attr.attr);
> - if (error)
> + if (error) {
> + printk("%s: %p->uid = %d\n", __func__, up, up->uid);
> + WARN_ON(1);
> kobject_del(kobj);
> + }
>
> kobject_uevent(kobj, KOBJ_ADD);
>
> @@ -363,6 +366,7 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
> }
>
> if (sched_create_user(new) < 0) {
> + WARN_ON(1);
> key_put(new->uid_keyring);
> key_put(new->session_keyring);
> kmem_cache_free(uid_cachep, new);
> @@ -371,6 +375,7 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
> }
>
> if (user_kobject_create(new)) {
> + WARN_ON(1);
> sched_destroy_user(new);
> key_put(new->uid_keyring);
> key_put(new->session_keyring);
> @@ -386,6 +391,10 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
> spin_lock_irq(&uidhash_lock);
> up = uid_hash_find(uid, hashent);
> if (up) {
> +#ifdef CONFIG_FAIR_USER_SCHED
> + printk("%s: %p->uid = %d\n", __func__, up, up->uid);
> + WARN_ON(1);
> +#endif
> /* This case is not possible when CONFIG_FAIR_USER_SCHED
> * is defined, since we serialize alloc_uid() using
> * uids_mutex. Hence no need to call
> diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
> index 7af90fc..3479c55 100644
> --- a/kernel/user_namespace.c
> +++ b/kernel/user_namespace.c
> @@ -32,6 +32,8 @@ static struct user_namespace *clone_user_ns(struct user_namespace *old_ns)
> struct user_struct *new_user;
> int n;
>
> + printk("%s: ENTER\n", __func__);
> +
> ns = kmalloc(sizeof(struct user_namespace), GFP_KERNEL);
> if (!ns)
> return ERR_PTR(-ENOMEM);

--
regards,
Dhaval


\
 
 \ /
  Last update: 2008-03-04 17:41    [W:0.111 / U:0.932 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site