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;