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;