aboutsummaryrefslogtreecommitdiffstats
path: root/fs/debugfs/inode.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-01-25 14:36:18 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2015-01-25 16:52:53 -0500
commitedac65eaf8d5c00b1d6004a44e76b9de6b038dc6 (patch)
tree61b3dc2fe048b296a57fa5a60177c0d223a86c1c /fs/debugfs/inode.c
parent680b302409cdc87c2000a31f2ceb2951bd642260 (diff)
debugfs: take mode-dependent parts of debugfs_get_inode() into callers
... and trim the arguments list Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/debugfs/inode.c')
-rw-r--r--fs/debugfs/inode.c48
1 files changed, 16 insertions, 32 deletions
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index b765c04eba20..61e9a6815a19 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -34,37 +34,12 @@ static struct vfsmount *debugfs_mount;
34static int debugfs_mount_count; 34static int debugfs_mount_count;
35static bool debugfs_registered; 35static bool debugfs_registered;
36 36
37static struct inode *debugfs_get_inode(struct super_block *sb, umode_t mode, dev_t dev, 37static struct inode *debugfs_get_inode(struct super_block *sb)
38 void *data, const struct file_operations *fops)
39
40{ 38{
41 struct inode *inode = new_inode(sb); 39 struct inode *inode = new_inode(sb);
42
43 if (inode) { 40 if (inode) {
44 inode->i_ino = get_next_ino(); 41 inode->i_ino = get_next_ino();
45 inode->i_mode = mode;
46 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 42 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
47 switch (mode & S_IFMT) {
48 default:
49 init_special_inode(inode, mode, dev);
50 break;
51 case S_IFREG:
52 inode->i_fop = fops ? fops : &debugfs_file_operations;
53 inode->i_private = data;
54 break;
55 case S_IFLNK:
56 inode->i_op = &debugfs_link_operations;
57 inode->i_private = data;
58 break;
59 case S_IFDIR:
60 inode->i_op = &simple_dir_inode_operations;
61 inode->i_fop = &simple_dir_operations;
62
63 /* directory inodes start off with i_nlink == 2
64 * (for "." entry) */
65 inc_nlink(inode);
66 break;
67 }
68 } 43 }
69 return inode; 44 return inode;
70} 45}
@@ -334,10 +309,13 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
334 if (IS_ERR(dentry)) 309 if (IS_ERR(dentry))
335 return NULL; 310 return NULL;
336 311
337 inode = debugfs_get_inode(dentry->d_sb, mode, 0, data, fops); 312 inode = debugfs_get_inode(dentry->d_sb);
338 if (unlikely(!inode)) 313 if (unlikely(!inode))
339 return end_creating(dentry, -ENOMEM); 314 return end_creating(dentry, -ENOMEM);
340 315
316 inode->i_mode = mode;
317 inode->i_fop = fops ? fops : &debugfs_file_operations;
318 inode->i_private = data;
341 d_instantiate(dentry, inode); 319 d_instantiate(dentry, inode);
342 dget(dentry); 320 dget(dentry);
343 fsnotify_create(dentry->d_parent->d_inode, dentry); 321 fsnotify_create(dentry->d_parent->d_inode, dentry);
@@ -371,12 +349,16 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
371 if (IS_ERR(dentry)) 349 if (IS_ERR(dentry))
372 return NULL; 350 return NULL;
373 351
374 inode = debugfs_get_inode(dentry->d_sb, 352 inode = debugfs_get_inode(dentry->d_sb);
375 S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO,
376 0, NULL, NULL);
377 if (unlikely(!inode)) 353 if (unlikely(!inode))
378 return end_creating(dentry, -ENOMEM); 354 return end_creating(dentry, -ENOMEM);
379 355
356 inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
357 inode->i_op = &simple_dir_inode_operations;
358 inode->i_fop = &simple_dir_operations;
359
360 /* directory inodes start off with i_nlink == 2 (for "." entry) */
361 inc_nlink(inode);
380 d_instantiate(dentry, inode); 362 d_instantiate(dentry, inode);
381 dget(dentry); 363 dget(dentry);
382 inc_nlink(dentry->d_parent->d_inode); 364 inc_nlink(dentry->d_parent->d_inode);
@@ -423,12 +405,14 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
423 return NULL; 405 return NULL;
424 } 406 }
425 407
426 inode = debugfs_get_inode(dentry->d_sb, S_IFLNK | S_IRWXUGO, 0, 408 inode = debugfs_get_inode(dentry->d_sb);
427 link, NULL);
428 if (unlikely(!inode)) { 409 if (unlikely(!inode)) {
429 kfree(link); 410 kfree(link);
430 return end_creating(dentry, -ENOMEM); 411 return end_creating(dentry, -ENOMEM);
431 } 412 }
413 inode->i_mode = S_IFLNK | S_IRWXUGO;
414 inode->i_op = &debugfs_link_operations;
415 inode->i_private = link;
432 d_instantiate(dentry, inode); 416 d_instantiate(dentry, inode);
433 dget(dentry); 417 dget(dentry);
434 return end_creating(dentry, 0); 418 return end_creating(dentry, 0);