diff -urpNX build-tools/dontdiff linux-2.5.75/fs/sysfs/dir.c linux-2.5.75-willy/fs/sysfs/dir.c --- linux-2.5.75/fs/sysfs/dir.c 2003-07-10 14:08:25.000000000 -0600 +++ linux-2.5.75-willy/fs/sysfs/dir.c 2003-08-06 12:25:15.000000000 -0600 @@ -30,7 +30,7 @@ int sysfs_create_dir(struct kobject * ko { struct dentry * dentry = NULL; struct dentry * parent; - int error = 0; + int error; if (!kobj) return -EINVAL; @@ -44,15 +44,18 @@ int sysfs_create_dir(struct kobject * ko down(&parent->d_inode->i_sem); dentry = sysfs_get_dentry(parent,kobj->name); - if (!IS_ERR(dentry)) { - dentry->d_fsdata = (void *)kobj; - kobj->dentry = dentry; - error = sysfs_create(dentry,(S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO), - init_dir); - if (!error) - parent->d_inode->i_nlink++; - } else - error = PTR_ERR(dentry); + error = PTR_ERR(dentry); + if (IS_ERR(dentry)) + goto out; + error = sysfs_create(dentry, S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, + init_dir); + if (error) + goto out; + dentry->d_fsdata = kobj; + kobj->dentry = dentry; + parent->d_inode->i_nlink++; + + out: up(&parent->d_inode->i_sem); return error; .