diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-01-25 14:36:18 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-01-25 16:52:53 -0500 |
commit | edac65eaf8d5c00b1d6004a44e76b9de6b038dc6 (patch) | |
tree | 61b3dc2fe048b296a57fa5a60177c0d223a86c1c /fs/debugfs/inode.c | |
parent | 680b302409cdc87c2000a31f2ceb2951bd642260 (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.c | 48 |
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; | |||
34 | static int debugfs_mount_count; | 34 | static int debugfs_mount_count; |
35 | static bool debugfs_registered; | 35 | static bool debugfs_registered; |
36 | 36 | ||
37 | static struct inode *debugfs_get_inode(struct super_block *sb, umode_t mode, dev_t dev, | 37 | static 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); |