Merge tag 'linux-kselftest-kunit-5.7-rc1' of git://git.kernel.org/pub/scm/linux/kerne...
[linux-block.git] / fs / debugfs / inode.c
CommitLineData
3bce94fd 1// SPDX-License-Identifier: GPL-2.0
1da177e4 2/*
bd33d12f 3 * inode.c - part of debugfs, a tiny little debug file system
1da177e4 4 *
43e23b6c 5 * Copyright (C) 2004,2019 Greg Kroah-Hartman <greg@kroah.com>
1da177e4 6 * Copyright (C) 2004 IBM Inc.
43e23b6c 7 * Copyright (C) 2019 Linux Foundation <gregkh@linuxfoundation.org>
1da177e4 8 *
1da177e4 9 * debugfs is for people to use instead of /proc or /sys.
e1511a84 10 * See ./Documentation/core-api/kernel-api.rst for more details.
1da177e4
LT
11 */
12
d03ae477
GKH
13#define pr_fmt(fmt) "debugfs: " fmt
14
1da177e4
LT
15#include <linux/module.h>
16#include <linux/fs.h>
17#include <linux/mount.h>
18#include <linux/pagemap.h>
19#include <linux/init.h>
4d8ebddc 20#include <linux/kobject.h>
1da177e4
LT
21#include <linux/namei.h>
22#include <linux/debugfs.h>
4f36557f 23#include <linux/fsnotify.h>
66f54963 24#include <linux/string.h>
d6e48686
LN
25#include <linux/seq_file.h>
26#include <linux/parser.h>
92562927 27#include <linux/magic.h>
5a0e3ad6 28#include <linux/slab.h>
5496197f 29#include <linux/security.h>
9fd4dcec
NS
30
31#include "internal.h"
1da177e4 32
82aceae4 33#define DEBUGFS_DEFAULT_MODE 0700
d6e48686 34
1da177e4
LT
35static struct vfsmount *debugfs_mount;
36static int debugfs_mount_count;
c0f92ba9 37static bool debugfs_registered;
1da177e4 38
5496197f
DH
39/*
40 * Don't allow access attributes to be changed whilst the kernel is locked down
41 * so that we can use the file mode as part of a heuristic to determine whether
42 * to lock down individual files.
43 */
44static int debugfs_setattr(struct dentry *dentry, struct iattr *ia)
45{
46 int ret = security_locked_down(LOCKDOWN_DEBUGFS);
47
48 if (ret && (ia->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)))
49 return ret;
50 return simple_setattr(dentry, ia);
51}
52
53static const struct inode_operations debugfs_file_inode_operations = {
54 .setattr = debugfs_setattr,
55};
56static const struct inode_operations debugfs_dir_inode_operations = {
57 .lookup = simple_lookup,
58 .setattr = debugfs_setattr,
59};
60static const struct inode_operations debugfs_symlink_inode_operations = {
61 .get_link = simple_get_link,
62 .setattr = debugfs_setattr,
63};
64
edac65ea 65static struct inode *debugfs_get_inode(struct super_block *sb)
1da177e4
LT
66{
67 struct inode *inode = new_inode(sb);
1da177e4 68 if (inode) {
85fe4025 69 inode->i_ino = get_next_ino();
1b48b530 70 inode->i_atime = inode->i_mtime =
c2050a45 71 inode->i_ctime = current_time(inode);
1da177e4 72 }
88e412ea 73 return inode;
1da177e4
LT
74}
75
d6e48686 76struct debugfs_mount_opts {
7dc05881
EB
77 kuid_t uid;
78 kgid_t gid;
d6e48686
LN
79 umode_t mode;
80};
81
82enum {
83 Opt_uid,
84 Opt_gid,
85 Opt_mode,
86 Opt_err
87};
88
89static const match_table_t tokens = {
90 {Opt_uid, "uid=%u"},
91 {Opt_gid, "gid=%u"},
92 {Opt_mode, "mode=%o"},
93 {Opt_err, NULL}
94};
95
96struct debugfs_fs_info {
97 struct debugfs_mount_opts mount_opts;
98};
99
100static int debugfs_parse_options(char *data, struct debugfs_mount_opts *opts)
101{
102 substring_t args[MAX_OPT_ARGS];
103 int option;
104 int token;
7dc05881
EB
105 kuid_t uid;
106 kgid_t gid;
d6e48686
LN
107 char *p;
108
109 opts->mode = DEBUGFS_DEFAULT_MODE;
110
111 while ((p = strsep(&data, ",")) != NULL) {
112 if (!*p)
113 continue;
114
115 token = match_token(p, tokens, args);
116 switch (token) {
117 case Opt_uid:
118 if (match_int(&args[0], &option))
119 return -EINVAL;
7dc05881
EB
120 uid = make_kuid(current_user_ns(), option);
121 if (!uid_valid(uid))
122 return -EINVAL;
123 opts->uid = uid;
d6e48686
LN
124 break;
125 case Opt_gid:
f1688e04 126 if (match_int(&args[0], &option))
d6e48686 127 return -EINVAL;
7dc05881
EB
128 gid = make_kgid(current_user_ns(), option);
129 if (!gid_valid(gid))
130 return -EINVAL;
131 opts->gid = gid;
d6e48686
LN
132 break;
133 case Opt_mode:
134 if (match_octal(&args[0], &option))
135 return -EINVAL;
136 opts->mode = option & S_IALLUGO;
137 break;
138 /*
139 * We might like to report bad mount options here;
140 * but traditionally debugfs has ignored all mount options
141 */
142 }
143 }
144
145 return 0;
146}
147
148static int debugfs_apply_options(struct super_block *sb)
149{
150 struct debugfs_fs_info *fsi = sb->s_fs_info;
2b0143b5 151 struct inode *inode = d_inode(sb->s_root);
d6e48686
LN
152 struct debugfs_mount_opts *opts = &fsi->mount_opts;
153
154 inode->i_mode &= ~S_IALLUGO;
155 inode->i_mode |= opts->mode;
156
157 inode->i_uid = opts->uid;
158 inode->i_gid = opts->gid;
159
160 return 0;
161}
162
163static int debugfs_remount(struct super_block *sb, int *flags, char *data)
164{
165 int err;
166 struct debugfs_fs_info *fsi = sb->s_fs_info;
167
02b9984d 168 sync_filesystem(sb);
d6e48686
LN
169 err = debugfs_parse_options(data, &fsi->mount_opts);
170 if (err)
171 goto fail;
172
173 debugfs_apply_options(sb);
174
175fail:
176 return err;
177}
178
179static int debugfs_show_options(struct seq_file *m, struct dentry *root)
180{
181 struct debugfs_fs_info *fsi = root->d_sb->s_fs_info;
182 struct debugfs_mount_opts *opts = &fsi->mount_opts;
183
7dc05881
EB
184 if (!uid_eq(opts->uid, GLOBAL_ROOT_UID))
185 seq_printf(m, ",uid=%u",
186 from_kuid_munged(&init_user_ns, opts->uid));
187 if (!gid_eq(opts->gid, GLOBAL_ROOT_GID))
188 seq_printf(m, ",gid=%u",
189 from_kgid_munged(&init_user_ns, opts->gid));
d6e48686
LN
190 if (opts->mode != DEBUGFS_DEFAULT_MODE)
191 seq_printf(m, ",mode=%o", opts->mode);
192
193 return 0;
194}
195
6234ddf4 196static void debugfs_free_inode(struct inode *inode)
0db59e59 197{
0db59e59 198 if (S_ISLNK(inode->i_mode))
5723cb01 199 kfree(inode->i_link);
93b919da
AV
200 free_inode_nonrcu(inode);
201}
202
d6e48686
LN
203static const struct super_operations debugfs_super_operations = {
204 .statfs = simple_statfs,
205 .remount_fs = debugfs_remount,
206 .show_options = debugfs_show_options,
6234ddf4 207 .free_inode = debugfs_free_inode,
d6e48686
LN
208};
209
7c8d4698
NS
210static void debugfs_release_dentry(struct dentry *dentry)
211{
7d39bc50
NS
212 void *fsd = dentry->d_fsdata;
213
214 if (!((unsigned long)fsd & DEBUGFS_FSDATA_IS_REAL_FOPS_BIT))
215 kfree(dentry->d_fsdata);
7c8d4698
NS
216}
217
77b3da6e
AV
218static struct vfsmount *debugfs_automount(struct path *path)
219{
93faccbb
EB
220 debugfs_automount_t f;
221 f = (debugfs_automount_t)path->dentry->d_fsdata;
222 return f(path->dentry, d_inode(path->dentry)->i_private);
77b3da6e
AV
223}
224
225static const struct dentry_operations debugfs_dops = {
226 .d_delete = always_delete_dentry,
7c8d4698 227 .d_release = debugfs_release_dentry,
77b3da6e
AV
228 .d_automount = debugfs_automount,
229};
230
1da177e4
LT
231static int debug_fill_super(struct super_block *sb, void *data, int silent)
232{
cda37124 233 static const struct tree_descr debug_files[] = {{""}};
d6e48686
LN
234 struct debugfs_fs_info *fsi;
235 int err;
236
d6e48686
LN
237 fsi = kzalloc(sizeof(struct debugfs_fs_info), GFP_KERNEL);
238 sb->s_fs_info = fsi;
239 if (!fsi) {
240 err = -ENOMEM;
241 goto fail;
242 }
243
244 err = debugfs_parse_options(data, &fsi->mount_opts);
245 if (err)
246 goto fail;
247
248 err = simple_fill_super(sb, DEBUGFS_MAGIC, debug_files);
249 if (err)
250 goto fail;
251
252 sb->s_op = &debugfs_super_operations;
77b3da6e 253 sb->s_d_op = &debugfs_dops;
d6e48686
LN
254
255 debugfs_apply_options(sb);
256
257 return 0;
1da177e4 258
d6e48686
LN
259fail:
260 kfree(fsi);
261 sb->s_fs_info = NULL;
262 return err;
1da177e4
LT
263}
264
fc14f2fe 265static struct dentry *debug_mount(struct file_system_type *fs_type,
454e2398 266 int flags, const char *dev_name,
fc14f2fe 267 void *data)
1da177e4 268{
fc14f2fe 269 return mount_single(fs_type, flags, data, debug_fill_super);
1da177e4
LT
270}
271
272static struct file_system_type debug_fs_type = {
273 .owner = THIS_MODULE,
274 .name = "debugfs",
fc14f2fe 275 .mount = debug_mount,
1da177e4
LT
276 .kill_sb = kill_litter_super,
277};
7f78e035 278MODULE_ALIAS_FS("debugfs");
1da177e4 279
a7c5437b
OS
280/**
281 * debugfs_lookup() - look up an existing debugfs file
282 * @name: a pointer to a string containing the name of the file to look up.
283 * @parent: a pointer to the parent dentry of the file.
284 *
285 * This function will return a pointer to a dentry if it succeeds. If the file
286 * doesn't exist or an error occurs, %NULL will be returned. The returned
287 * dentry must be passed to dput() when it is no longer needed.
288 *
289 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
290 * returned.
291 */
292struct dentry *debugfs_lookup(const char *name, struct dentry *parent)
293{
294 struct dentry *dentry;
295
296 if (IS_ERR(parent))
297 return NULL;
298
299 if (!parent)
300 parent = debugfs_mount->mnt_root;
301
6c2d4798 302 dentry = lookup_positive_unlocked(name, parent, strlen(name));
a7c5437b
OS
303 if (IS_ERR(dentry))
304 return NULL;
a7c5437b
OS
305 return dentry;
306}
307EXPORT_SYMBOL_GPL(debugfs_lookup);
308
190afd81 309static struct dentry *start_creating(const char *name, struct dentry *parent)
1da177e4 310{
190afd81 311 struct dentry *dentry;
cfa57c11
AV
312 int error;
313
d03ae477 314 pr_debug("creating file '%s'\n", name);
cfa57c11 315
c9e15f25
GK
316 if (IS_ERR(parent))
317 return parent;
318
cfa57c11
AV
319 error = simple_pin_fs(&debug_fs_type, &debugfs_mount,
320 &debugfs_mount_count);
43e23b6c
GKH
321 if (error) {
322 pr_err("Unable to pin filesystem for file '%s'\n", name);
190afd81 323 return ERR_PTR(error);
43e23b6c 324 }
1da177e4
LT
325
326 /* If the parent is not specified, we create it in the root.
88e412ea 327 * We need the root dentry to do this, which is in the super
1da177e4
LT
328 * block. A pointer to that is in the struct vfsmount that we
329 * have around.
330 */
ef52c75e 331 if (!parent)
4c1d5a64 332 parent = debugfs_mount->mnt_root;
1da177e4 333
5955102c 334 inode_lock(d_inode(parent));
a3d1e7eb
AV
335 if (unlikely(IS_DEADDIR(d_inode(parent))))
336 dentry = ERR_PTR(-ENOENT);
337 else
338 dentry = lookup_one_len(name, parent, strlen(name));
2b0143b5 339 if (!IS_ERR(dentry) && d_really_is_positive(dentry)) {
c33d4423
GKH
340 if (d_is_dir(dentry))
341 pr_err("Directory '%s' with parent '%s' already present!\n",
342 name, parent->d_name.name);
343 else
344 pr_err("File '%s' in directory '%s' already present!\n",
345 name, parent->d_name.name);
cfa57c11 346 dput(dentry);
190afd81
AV
347 dentry = ERR_PTR(-EEXIST);
348 }
0ee9608c
DB
349
350 if (IS_ERR(dentry)) {
5955102c 351 inode_unlock(d_inode(parent));
0ee9608c
DB
352 simple_release_fs(&debugfs_mount, &debugfs_mount_count);
353 }
354
190afd81
AV
355 return dentry;
356}
357
5233e311 358static struct dentry *failed_creating(struct dentry *dentry)
190afd81 359{
5955102c 360 inode_unlock(d_inode(dentry->d_parent));
190afd81 361 dput(dentry);
5233e311 362 simple_release_fs(&debugfs_mount, &debugfs_mount_count);
ff9fb72b 363 return ERR_PTR(-ENOMEM);
5233e311 364}
1da177e4 365
5233e311
AV
366static struct dentry *end_creating(struct dentry *dentry)
367{
5955102c 368 inode_unlock(d_inode(dentry->d_parent));
c3b1a350
AV
369 return dentry;
370}
371
49d200de
NS
372static struct dentry *__debugfs_create_file(const char *name, umode_t mode,
373 struct dentry *parent, void *data,
374 const struct file_operations *proxy_fops,
375 const struct file_operations *real_fops)
376{
377 struct dentry *dentry;
378 struct inode *inode;
379
380 if (!(mode & S_IFMT))
381 mode |= S_IFREG;
382 BUG_ON(!S_ISREG(mode));
383 dentry = start_creating(name, parent);
384
7d39bc50 385 if (IS_ERR(dentry))
ff9fb72b 386 return dentry;
49d200de
NS
387
388 inode = debugfs_get_inode(dentry->d_sb);
43e23b6c
GKH
389 if (unlikely(!inode)) {
390 pr_err("out of free dentries, can not create file '%s'\n",
391 name);
49d200de 392 return failed_creating(dentry);
43e23b6c 393 }
49d200de
NS
394
395 inode->i_mode = mode;
396 inode->i_private = data;
397
5496197f 398 inode->i_op = &debugfs_file_inode_operations;
49d200de 399 inode->i_fop = proxy_fops;
7d39bc50
NS
400 dentry->d_fsdata = (void *)((unsigned long)real_fops |
401 DEBUGFS_FSDATA_IS_REAL_FOPS_BIT);
49d200de
NS
402
403 d_instantiate(dentry, inode);
404 fsnotify_create(d_inode(dentry->d_parent), dentry);
405 return end_creating(dentry);
406}
407
1da177e4
LT
408/**
409 * debugfs_create_file - create a file in the debugfs filesystem
1da177e4 410 * @name: a pointer to a string containing the name of the file to create.
be030e65 411 * @mode: the permission that the file should have.
1da177e4 412 * @parent: a pointer to the parent dentry for this file. This should be a
e227867f 413 * directory dentry if set. If this parameter is NULL, then the
1da177e4
LT
414 * file will be created in the root of the debugfs filesystem.
415 * @data: a pointer to something that the caller will want to get to later
8e18e294 416 * on. The inode.i_private pointer will point to this value on
1da177e4
LT
417 * the open() call.
418 * @fops: a pointer to a struct file_operations that should be used for
419 * this file.
420 *
421 * This is the basic "create a file" function for debugfs. It allows for a
be030e65
AB
422 * wide range of flexibility in creating a file, or a directory (if you want
423 * to create a directory, the debugfs_create_dir() function is
1da177e4
LT
424 * recommended to be used instead.)
425 *
426 * This function will return a pointer to a dentry if it succeeds. This
427 * pointer must be passed to the debugfs_remove() function when the file is
428 * to be removed (no automatic cleanup happens if your module is unloaded,
adc92dd4 429 * you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be
ff9fb72b 430 * returned.
1da177e4 431 *
6468b3af 432 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
873760fb 433 * returned.
1da177e4 434 */
f4ae40a6 435struct dentry *debugfs_create_file(const char *name, umode_t mode,
1da177e4 436 struct dentry *parent, void *data,
99ac48f5 437 const struct file_operations *fops)
1da177e4 438{
680b3024 439
49d200de
NS
440 return __debugfs_create_file(name, mode, parent, data,
441 fops ? &debugfs_full_proxy_file_operations :
442 &debugfs_noop_file_operations,
443 fops);
444}
445EXPORT_SYMBOL_GPL(debugfs_create_file);
9fd4dcec 446
c6468808
NS
447/**
448 * debugfs_create_file_unsafe - create a file in the debugfs filesystem
449 * @name: a pointer to a string containing the name of the file to create.
450 * @mode: the permission that the file should have.
451 * @parent: a pointer to the parent dentry for this file. This should be a
452 * directory dentry if set. If this parameter is NULL, then the
453 * file will be created in the root of the debugfs filesystem.
454 * @data: a pointer to something that the caller will want to get to later
455 * on. The inode.i_private pointer will point to this value on
456 * the open() call.
457 * @fops: a pointer to a struct file_operations that should be used for
458 * this file.
459 *
460 * debugfs_create_file_unsafe() is completely analogous to
461 * debugfs_create_file(), the only difference being that the fops
462 * handed it will not get protected against file removals by the
463 * debugfs core.
464 *
465 * It is your responsibility to protect your struct file_operation
0eeb2731
SS
466 * methods against file removals by means of debugfs_file_get()
467 * and debugfs_file_put(). ->open() is still protected by
c6468808
NS
468 * debugfs though.
469 *
470 * Any struct file_operations defined by means of
471 * DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and
472 * thus, may be used here.
473 */
49d200de
NS
474struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode,
475 struct dentry *parent, void *data,
476 const struct file_operations *fops)
477{
9fd4dcec 478
49d200de
NS
479 return __debugfs_create_file(name, mode, parent, data,
480 fops ? &debugfs_open_proxy_file_operations :
481 &debugfs_noop_file_operations,
482 fops);
1da177e4 483}
c6468808 484EXPORT_SYMBOL_GPL(debugfs_create_file_unsafe);
1da177e4 485
e59b4e91
DH
486/**
487 * debugfs_create_file_size - create a file in the debugfs filesystem
488 * @name: a pointer to a string containing the name of the file to create.
489 * @mode: the permission that the file should have.
490 * @parent: a pointer to the parent dentry for this file. This should be a
491 * directory dentry if set. If this parameter is NULL, then the
492 * file will be created in the root of the debugfs filesystem.
493 * @data: a pointer to something that the caller will want to get to later
494 * on. The inode.i_private pointer will point to this value on
495 * the open() call.
496 * @fops: a pointer to a struct file_operations that should be used for
497 * this file.
498 * @file_size: initial file size
499 *
500 * This is the basic "create a file" function for debugfs. It allows for a
501 * wide range of flexibility in creating a file, or a directory (if you want
502 * to create a directory, the debugfs_create_dir() function is
503 * recommended to be used instead.)
e59b4e91 504 */
526ee72d
GKH
505void debugfs_create_file_size(const char *name, umode_t mode,
506 struct dentry *parent, void *data,
507 const struct file_operations *fops,
508 loff_t file_size)
e59b4e91
DH
509{
510 struct dentry *de = debugfs_create_file(name, mode, parent, data, fops);
511
512 if (de)
2b0143b5 513 d_inode(de)->i_size = file_size;
e59b4e91
DH
514}
515EXPORT_SYMBOL_GPL(debugfs_create_file_size);
516
1da177e4
LT
517/**
518 * debugfs_create_dir - create a directory in the debugfs filesystem
1da177e4
LT
519 * @name: a pointer to a string containing the name of the directory to
520 * create.
521 * @parent: a pointer to the parent dentry for this file. This should be a
e227867f 522 * directory dentry if set. If this parameter is NULL, then the
1da177e4
LT
523 * directory will be created in the root of the debugfs filesystem.
524 *
525 * This function creates a directory in debugfs with the given name.
526 *
527 * This function will return a pointer to a dentry if it succeeds. This
528 * pointer must be passed to the debugfs_remove() function when the file is
529 * to be removed (no automatic cleanup happens if your module is unloaded,
adc92dd4 530 * you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be
ff9fb72b 531 * returned.
1da177e4 532 *
6468b3af 533 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
873760fb 534 * returned.
1da177e4
LT
535 */
536struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
537{
ad5abd5b 538 struct dentry *dentry = start_creating(name, parent);
680b3024 539 struct inode *inode;
ad5abd5b
AV
540
541 if (IS_ERR(dentry))
ff9fb72b 542 return dentry;
ad5abd5b 543
edac65ea 544 inode = debugfs_get_inode(dentry->d_sb);
43e23b6c
GKH
545 if (unlikely(!inode)) {
546 pr_err("out of free dentries, can not create directory '%s'\n",
547 name);
5233e311 548 return failed_creating(dentry);
43e23b6c 549 }
680b3024 550
f5b7769e 551 inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
5496197f 552 inode->i_op = &debugfs_dir_inode_operations;
edac65ea
AV
553 inode->i_fop = &simple_dir_operations;
554
555 /* directory inodes start off with i_nlink == 2 (for "." entry) */
556 inc_nlink(inode);
680b3024 557 d_instantiate(dentry, inode);
2b0143b5
DH
558 inc_nlink(d_inode(dentry->d_parent));
559 fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
5233e311 560 return end_creating(dentry);
1da177e4
LT
561}
562EXPORT_SYMBOL_GPL(debugfs_create_dir);
563
77b3da6e
AV
564/**
565 * debugfs_create_automount - create automount point in the debugfs filesystem
566 * @name: a pointer to a string containing the name of the file to create.
567 * @parent: a pointer to the parent dentry for this file. This should be a
568 * directory dentry if set. If this parameter is NULL, then the
569 * file will be created in the root of the debugfs filesystem.
570 * @f: function to be called when pathname resolution steps on that one.
571 * @data: opaque argument to pass to f().
572 *
573 * @f should return what ->d_automount() would.
574 */
575struct dentry *debugfs_create_automount(const char *name,
576 struct dentry *parent,
93faccbb 577 debugfs_automount_t f,
77b3da6e
AV
578 void *data)
579{
580 struct dentry *dentry = start_creating(name, parent);
581 struct inode *inode;
582
583 if (IS_ERR(dentry))
ff9fb72b 584 return dentry;
77b3da6e
AV
585
586 inode = debugfs_get_inode(dentry->d_sb);
43e23b6c
GKH
587 if (unlikely(!inode)) {
588 pr_err("out of free dentries, can not create automount '%s'\n",
589 name);
77b3da6e 590 return failed_creating(dentry);
43e23b6c 591 }
77b3da6e 592
87243deb 593 make_empty_dir_inode(inode);
77b3da6e
AV
594 inode->i_flags |= S_AUTOMOUNT;
595 inode->i_private = data;
596 dentry->d_fsdata = (void *)f;
a8f324a4
RP
597 /* directory inodes start off with i_nlink == 2 (for "." entry) */
598 inc_nlink(inode);
77b3da6e 599 d_instantiate(dentry, inode);
a8f324a4
RP
600 inc_nlink(d_inode(dentry->d_parent));
601 fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
77b3da6e
AV
602 return end_creating(dentry);
603}
604EXPORT_SYMBOL(debugfs_create_automount);
605
66f54963
PO
606/**
607 * debugfs_create_symlink- create a symbolic link in the debugfs filesystem
608 * @name: a pointer to a string containing the name of the symbolic link to
609 * create.
610 * @parent: a pointer to the parent dentry for this symbolic link. This
e227867f 611 * should be a directory dentry if set. If this parameter is NULL,
66f54963
PO
612 * then the symbolic link will be created in the root of the debugfs
613 * filesystem.
614 * @target: a pointer to a string containing the path to the target of the
615 * symbolic link.
616 *
617 * This function creates a symbolic link with the given name in debugfs that
618 * links to the given target path.
619 *
620 * This function will return a pointer to a dentry if it succeeds. This
621 * pointer must be passed to the debugfs_remove() function when the symbolic
622 * link is to be removed (no automatic cleanup happens if your module is
adc92dd4 623 * unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR)
ff9fb72b 624 * will be returned.
66f54963
PO
625 *
626 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
873760fb 627 * returned.
66f54963
PO
628 */
629struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
630 const char *target)
631{
ad5abd5b 632 struct dentry *dentry;
680b3024
AV
633 struct inode *inode;
634 char *link = kstrdup(target, GFP_KERNEL);
66f54963 635 if (!link)
ff9fb72b 636 return ERR_PTR(-ENOMEM);
66f54963 637
ad5abd5b 638 dentry = start_creating(name, parent);
ad5abd5b 639 if (IS_ERR(dentry)) {
66f54963 640 kfree(link);
ff9fb72b 641 return dentry;
ad5abd5b
AV
642 }
643
edac65ea 644 inode = debugfs_get_inode(dentry->d_sb);
680b3024 645 if (unlikely(!inode)) {
43e23b6c
GKH
646 pr_err("out of free dentries, can not create symlink '%s'\n",
647 name);
ad5abd5b 648 kfree(link);
5233e311 649 return failed_creating(dentry);
680b3024 650 }
edac65ea 651 inode->i_mode = S_IFLNK | S_IRWXUGO;
5496197f 652 inode->i_op = &debugfs_symlink_inode_operations;
5723cb01 653 inode->i_link = link;
680b3024 654 d_instantiate(dentry, inode);
5233e311 655 return end_creating(dentry);
66f54963
PO
656}
657EXPORT_SYMBOL_GPL(debugfs_create_symlink);
658
823e545c 659static void __debugfs_file_removed(struct dentry *dentry)
e9117a5a
NS
660{
661 struct debugfs_fsdata *fsd;
662
7d39bc50
NS
663 /*
664 * Paired with the closing smp_mb() implied by a successful
665 * cmpxchg() in debugfs_file_get(): either
666 * debugfs_file_get() must see a dead dentry or we must see a
667 * debugfs_fsdata instance at ->d_fsdata here (or both).
668 */
669 smp_mb();
670 fsd = READ_ONCE(dentry->d_fsdata);
671 if ((unsigned long)fsd & DEBUGFS_FSDATA_IS_REAL_FOPS_BIT)
672 return;
e9117a5a
NS
673 if (!refcount_dec_and_test(&fsd->active_users))
674 wait_for_completion(&fsd->active_users_drained);
675}
676
a3d1e7eb 677static void remove_one(struct dentry *victim)
9505e637 678{
a3d1e7eb
AV
679 if (d_is_reg(victim))
680 __debugfs_file_removed(victim);
681 simple_release_fs(&debugfs_mount, &debugfs_mount_count);
9505e637 682}
9505e637
HS
683
684/**
a3d1e7eb 685 * debugfs_remove - recursively removes a directory
398dc4ad
UM
686 * @dentry: a pointer to a the dentry of the directory to be removed. If this
687 * parameter is NULL or an error value, nothing will be done.
9505e637
HS
688 *
689 * This function recursively removes a directory tree in debugfs that
690 * was previously created with a call to another debugfs function
691 * (like debugfs_create_file() or variants thereof.)
692 *
693 * This function is required to be called in order for the file to be
694 * removed, no automatic cleanup of files will happen when a module is
695 * removed, you are responsible here.
696 */
a3d1e7eb 697void debugfs_remove(struct dentry *dentry)
9505e637 698{
a59d6293 699 if (IS_ERR_OR_NULL(dentry))
9505e637
HS
700 return;
701
a3d1e7eb
AV
702 simple_pin_fs(&debug_fs_type, &debugfs_mount, &debugfs_mount_count);
703 simple_recursive_removal(dentry, remove_one);
704 simple_release_fs(&debugfs_mount, &debugfs_mount_count);
1da177e4 705}
a3d1e7eb 706EXPORT_SYMBOL_GPL(debugfs_remove);
1da177e4 707
cfc94cdf
JK
708/**
709 * debugfs_rename - rename a file/directory in the debugfs filesystem
710 * @old_dir: a pointer to the parent dentry for the renamed object. This
711 * should be a directory dentry.
712 * @old_dentry: dentry of an object to be renamed.
713 * @new_dir: a pointer to the parent dentry where the object should be
714 * moved. This should be a directory dentry.
715 * @new_name: a pointer to a string containing the target name.
716 *
717 * This function renames a file/directory in debugfs. The target must not
718 * exist for rename to succeed.
719 *
720 * This function will return a pointer to old_dentry (which is updated to
721 * reflect renaming) if it succeeds. If an error occurs, %NULL will be
722 * returned.
723 *
724 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
725 * returned.
726 */
727struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
728 struct dentry *new_dir, const char *new_name)
729{
730 int error;
731 struct dentry *dentry = NULL, *trap;
49d31c2f 732 struct name_snapshot old_name;
cfc94cdf 733
d88c93f0
GKH
734 if (IS_ERR(old_dir))
735 return old_dir;
736 if (IS_ERR(new_dir))
737 return new_dir;
738 if (IS_ERR_OR_NULL(old_dentry))
739 return old_dentry;
740
cfc94cdf
JK
741 trap = lock_rename(new_dir, old_dir);
742 /* Source or destination directories don't exist? */
2b0143b5 743 if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir))
cfc94cdf
JK
744 goto exit;
745 /* Source does not exist, cyclic rename, or mountpoint? */
2b0143b5 746 if (d_really_is_negative(old_dentry) || old_dentry == trap ||
cfc94cdf
JK
747 d_mountpoint(old_dentry))
748 goto exit;
749 dentry = lookup_one_len(new_name, new_dir, strlen(new_name));
750 /* Lookup failed, cyclic rename or target exists? */
2b0143b5 751 if (IS_ERR(dentry) || dentry == trap || d_really_is_positive(dentry))
cfc94cdf
JK
752 goto exit;
753
49d31c2f 754 take_dentry_name_snapshot(&old_name, old_dentry);
cfc94cdf 755
2b0143b5 756 error = simple_rename(d_inode(old_dir), old_dentry, d_inode(new_dir),
e0e0be8a 757 dentry, 0);
cfc94cdf 758 if (error) {
49d31c2f 759 release_dentry_name_snapshot(&old_name);
cfc94cdf
JK
760 goto exit;
761 }
762 d_move(old_dentry, dentry);
f4ec3a3d 763 fsnotify_move(d_inode(old_dir), d_inode(new_dir), &old_name.name,
e36cb0b8 764 d_is_dir(old_dentry),
5a190ae6 765 NULL, old_dentry);
49d31c2f 766 release_dentry_name_snapshot(&old_name);
cfc94cdf
JK
767 unlock_rename(new_dir, old_dir);
768 dput(dentry);
769 return old_dentry;
770exit:
771 if (dentry && !IS_ERR(dentry))
772 dput(dentry);
773 unlock_rename(new_dir, old_dir);
ff9fb72b
GKH
774 if (IS_ERR(dentry))
775 return dentry;
776 return ERR_PTR(-EINVAL);
cfc94cdf
JK
777}
778EXPORT_SYMBOL_GPL(debugfs_rename);
779
c0f92ba9
FW
780/**
781 * debugfs_initialized - Tells whether debugfs has been registered
782 */
783bool debugfs_initialized(void)
784{
785 return debugfs_registered;
786}
787EXPORT_SYMBOL_GPL(debugfs_initialized);
788
1da177e4
LT
789static int __init debugfs_init(void)
790{
791 int retval;
792
f9bb4882
EB
793 retval = sysfs_create_mount_point(kernel_kobj, "debug");
794 if (retval)
795 return retval;
1da177e4
LT
796
797 retval = register_filesystem(&debug_fs_type);
798 if (retval)
f9bb4882 799 sysfs_remove_mount_point(kernel_kobj, "debug");
c0f92ba9
FW
800 else
801 debugfs_registered = true;
802
1da177e4
LT
803 return retval;
804}
1da177e4 805core_initcall(debugfs_init);