debugfs: kill __create_file()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 25 Jan 2015 19:02:31 +0000 (14:02 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 25 Jan 2015 21:52:31 +0000 (16:52 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/debugfs/inode.c

index 100186c..18564b0 100644 (file)
@@ -348,30 +348,6 @@ static struct dentry *end_creating(struct dentry *dentry, int error)
        return dentry;
 }
 
-static struct dentry *__create_file(const char *name, umode_t mode,
-                                   struct dentry *parent, void *data,
-                                   const struct file_operations *fops)
-{
-       struct dentry *dentry = start_creating(name, parent);
-       int error;
-
-       if (IS_ERR(dentry))
-               return NULL;
-
-       switch (mode & S_IFMT) {
-       case S_IFDIR:
-               error = debugfs_mkdir(dentry, mode);
-               break;
-       case S_IFLNK:
-               error = debugfs_link(dentry, mode, data);
-               break;
-       default:
-               error = debugfs_create(dentry, mode, data, fops);
-               break;
-       }
-       return end_creating(dentry, error);
-}
-
 /**
  * debugfs_create_file - create a file in the debugfs filesystem
  * @name: a pointer to a string containing the name of the file to create.
@@ -402,15 +378,19 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
                                   struct dentry *parent, void *data,
                                   const struct file_operations *fops)
 {
-       switch (mode & S_IFMT) {
-       case S_IFREG:
-       case 0:
-               break;
-       default:
-               BUG();
-       }
+       struct dentry *dentry;
+       int error;
+
+       if (!(mode & S_IFMT))
+               mode |= S_IFREG;
+       BUG_ON(!S_ISREG(mode));
+       dentry = start_creating(name, parent);
+
+       if (IS_ERR(dentry))
+               return NULL;
 
-       return __create_file(name, mode, parent, data, fops);
+       error = debugfs_create(dentry, mode, data, fops);
+       return end_creating(dentry, error);
 }
 EXPORT_SYMBOL_GPL(debugfs_create_file);
 
@@ -434,8 +414,14 @@ EXPORT_SYMBOL_GPL(debugfs_create_file);
  */
 struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
 {
-       return __create_file(name, S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO,
-                                  parent, NULL, NULL);
+       struct dentry *dentry = start_creating(name, parent);
+       int error;
+
+       if (IS_ERR(dentry))
+               return NULL;
+
+       error = debugfs_mkdir(dentry, S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO);
+       return end_creating(dentry, error);
 }
 EXPORT_SYMBOL_GPL(debugfs_create_dir);
 
@@ -465,17 +451,26 @@ EXPORT_SYMBOL_GPL(debugfs_create_dir);
 struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
                                      const char *target)
 {
-       struct dentry *result;
+       struct dentry *dentry;
        char *link;
+       int error;
 
        link = kstrdup(target, GFP_KERNEL);
        if (!link)
                return NULL;
 
-       result = __create_file(name, S_IFLNK | S_IRWXUGO, parent, link, NULL);
-       if (!result)
+       dentry = start_creating(name, parent);
+
+       if (IS_ERR(dentry)) {
                kfree(link);
-       return result;
+               return NULL;
+       }
+
+       error = debugfs_link(dentry, S_IFLNK | S_IRWXUGO, link);
+       if (error)
+               kfree(link);
+
+       return end_creating(dentry, error);
 }
 EXPORT_SYMBOL_GPL(debugfs_create_symlink);