Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/fs/debugfs/inode.c
26282 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* inode.c - part of debugfs, a tiny little debug file system
4
*
5
* Copyright (C) 2004,2019 Greg Kroah-Hartman <[email protected]>
6
* Copyright (C) 2004 IBM Inc.
7
* Copyright (C) 2019 Linux Foundation <[email protected]>
8
*
9
* debugfs is for people to use instead of /proc or /sys.
10
* See ./Documentation/core-api/kernel-api.rst for more details.
11
*/
12
13
#define pr_fmt(fmt) "debugfs: " fmt
14
15
#include <linux/module.h>
16
#include <linux/fs.h>
17
#include <linux/fs_context.h>
18
#include <linux/fs_parser.h>
19
#include <linux/pagemap.h>
20
#include <linux/init.h>
21
#include <linux/kobject.h>
22
#include <linux/namei.h>
23
#include <linux/debugfs.h>
24
#include <linux/fsnotify.h>
25
#include <linux/string.h>
26
#include <linux/seq_file.h>
27
#include <linux/magic.h>
28
#include <linux/slab.h>
29
#include <linux/security.h>
30
31
#include "internal.h"
32
33
#define DEBUGFS_DEFAULT_MODE 0700
34
35
static struct vfsmount *debugfs_mount;
36
static int debugfs_mount_count;
37
static bool debugfs_registered;
38
static unsigned int debugfs_allow __ro_after_init = DEFAULT_DEBUGFS_ALLOW_BITS;
39
40
/*
41
* Don't allow access attributes to be changed whilst the kernel is locked down
42
* so that we can use the file mode as part of a heuristic to determine whether
43
* to lock down individual files.
44
*/
45
static int debugfs_setattr(struct mnt_idmap *idmap,
46
struct dentry *dentry, struct iattr *ia)
47
{
48
int ret;
49
50
if (ia->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) {
51
ret = security_locked_down(LOCKDOWN_DEBUGFS);
52
if (ret)
53
return ret;
54
}
55
return simple_setattr(&nop_mnt_idmap, dentry, ia);
56
}
57
58
static const struct inode_operations debugfs_file_inode_operations = {
59
.setattr = debugfs_setattr,
60
};
61
static const struct inode_operations debugfs_dir_inode_operations = {
62
.lookup = simple_lookup,
63
.setattr = debugfs_setattr,
64
};
65
static const struct inode_operations debugfs_symlink_inode_operations = {
66
.get_link = simple_get_link,
67
.setattr = debugfs_setattr,
68
};
69
70
static struct inode *debugfs_get_inode(struct super_block *sb)
71
{
72
struct inode *inode = new_inode(sb);
73
if (inode) {
74
inode->i_ino = get_next_ino();
75
simple_inode_init_ts(inode);
76
}
77
return inode;
78
}
79
80
struct debugfs_fs_info {
81
kuid_t uid;
82
kgid_t gid;
83
umode_t mode;
84
/* Opt_* bitfield. */
85
unsigned int opts;
86
};
87
88
enum {
89
Opt_uid,
90
Opt_gid,
91
Opt_mode,
92
Opt_source,
93
};
94
95
static const struct fs_parameter_spec debugfs_param_specs[] = {
96
fsparam_gid ("gid", Opt_gid),
97
fsparam_u32oct ("mode", Opt_mode),
98
fsparam_uid ("uid", Opt_uid),
99
fsparam_string ("source", Opt_source),
100
{}
101
};
102
103
static int debugfs_parse_param(struct fs_context *fc, struct fs_parameter *param)
104
{
105
struct debugfs_fs_info *opts = fc->s_fs_info;
106
struct fs_parse_result result;
107
int opt;
108
109
opt = fs_parse(fc, debugfs_param_specs, param, &result);
110
if (opt < 0) {
111
/*
112
* We might like to report bad mount options here; but
113
* traditionally debugfs has ignored all mount options
114
*/
115
if (opt == -ENOPARAM)
116
return 0;
117
118
return opt;
119
}
120
121
switch (opt) {
122
case Opt_uid:
123
opts->uid = result.uid;
124
break;
125
case Opt_gid:
126
opts->gid = result.gid;
127
break;
128
case Opt_mode:
129
opts->mode = result.uint_32 & S_IALLUGO;
130
break;
131
case Opt_source:
132
if (fc->source)
133
return invalfc(fc, "Multiple sources specified");
134
fc->source = param->string;
135
param->string = NULL;
136
break;
137
/*
138
* We might like to report bad mount options here;
139
* but traditionally debugfs has ignored all mount options
140
*/
141
}
142
143
opts->opts |= BIT(opt);
144
145
return 0;
146
}
147
148
static void _debugfs_apply_options(struct super_block *sb, bool remount)
149
{
150
struct debugfs_fs_info *fsi = sb->s_fs_info;
151
struct inode *inode = d_inode(sb->s_root);
152
153
/*
154
* On remount, only reset mode/uid/gid if they were provided as mount
155
* options.
156
*/
157
158
if (!remount || fsi->opts & BIT(Opt_mode)) {
159
inode->i_mode &= ~S_IALLUGO;
160
inode->i_mode |= fsi->mode;
161
}
162
163
if (!remount || fsi->opts & BIT(Opt_uid))
164
inode->i_uid = fsi->uid;
165
166
if (!remount || fsi->opts & BIT(Opt_gid))
167
inode->i_gid = fsi->gid;
168
}
169
170
static void debugfs_apply_options(struct super_block *sb)
171
{
172
_debugfs_apply_options(sb, false);
173
}
174
175
static void debugfs_apply_options_remount(struct super_block *sb)
176
{
177
_debugfs_apply_options(sb, true);
178
}
179
180
static int debugfs_reconfigure(struct fs_context *fc)
181
{
182
struct super_block *sb = fc->root->d_sb;
183
struct debugfs_fs_info *sb_opts = sb->s_fs_info;
184
struct debugfs_fs_info *new_opts = fc->s_fs_info;
185
186
if (!new_opts)
187
return 0;
188
189
sync_filesystem(sb);
190
191
/* structure copy of new mount options to sb */
192
*sb_opts = *new_opts;
193
debugfs_apply_options_remount(sb);
194
195
return 0;
196
}
197
198
static int debugfs_show_options(struct seq_file *m, struct dentry *root)
199
{
200
struct debugfs_fs_info *fsi = root->d_sb->s_fs_info;
201
202
if (!uid_eq(fsi->uid, GLOBAL_ROOT_UID))
203
seq_printf(m, ",uid=%u",
204
from_kuid_munged(&init_user_ns, fsi->uid));
205
if (!gid_eq(fsi->gid, GLOBAL_ROOT_GID))
206
seq_printf(m, ",gid=%u",
207
from_kgid_munged(&init_user_ns, fsi->gid));
208
if (fsi->mode != DEBUGFS_DEFAULT_MODE)
209
seq_printf(m, ",mode=%o", fsi->mode);
210
211
return 0;
212
}
213
214
static struct kmem_cache *debugfs_inode_cachep __ro_after_init;
215
216
static void init_once(void *foo)
217
{
218
struct debugfs_inode_info *info = foo;
219
inode_init_once(&info->vfs_inode);
220
}
221
222
static struct inode *debugfs_alloc_inode(struct super_block *sb)
223
{
224
struct debugfs_inode_info *info;
225
info = alloc_inode_sb(sb, debugfs_inode_cachep, GFP_KERNEL);
226
if (!info)
227
return NULL;
228
return &info->vfs_inode;
229
}
230
231
static void debugfs_free_inode(struct inode *inode)
232
{
233
if (S_ISLNK(inode->i_mode))
234
kfree(inode->i_link);
235
kmem_cache_free(debugfs_inode_cachep, DEBUGFS_I(inode));
236
}
237
238
static const struct super_operations debugfs_super_operations = {
239
.statfs = simple_statfs,
240
.show_options = debugfs_show_options,
241
.alloc_inode = debugfs_alloc_inode,
242
.free_inode = debugfs_free_inode,
243
};
244
245
static void debugfs_release_dentry(struct dentry *dentry)
246
{
247
struct debugfs_fsdata *fsd = dentry->d_fsdata;
248
249
if (fsd) {
250
WARN_ON(!list_empty(&fsd->cancellations));
251
mutex_destroy(&fsd->cancellations_mtx);
252
}
253
kfree(fsd);
254
}
255
256
static struct vfsmount *debugfs_automount(struct path *path)
257
{
258
struct inode *inode = path->dentry->d_inode;
259
260
return DEBUGFS_I(inode)->automount(path->dentry, inode->i_private);
261
}
262
263
static const struct dentry_operations debugfs_dops = {
264
.d_release = debugfs_release_dentry,
265
.d_automount = debugfs_automount,
266
};
267
268
static int debugfs_fill_super(struct super_block *sb, struct fs_context *fc)
269
{
270
static const struct tree_descr debug_files[] = {{""}};
271
int err;
272
273
err = simple_fill_super(sb, DEBUGFS_MAGIC, debug_files);
274
if (err)
275
return err;
276
277
sb->s_op = &debugfs_super_operations;
278
set_default_d_op(sb, &debugfs_dops);
279
sb->s_d_flags |= DCACHE_DONTCACHE;
280
281
debugfs_apply_options(sb);
282
283
return 0;
284
}
285
286
static int debugfs_get_tree(struct fs_context *fc)
287
{
288
int err;
289
290
if (!(debugfs_allow & DEBUGFS_ALLOW_API))
291
return -EPERM;
292
293
err = get_tree_single(fc, debugfs_fill_super);
294
if (err)
295
return err;
296
297
return debugfs_reconfigure(fc);
298
}
299
300
static void debugfs_free_fc(struct fs_context *fc)
301
{
302
kfree(fc->s_fs_info);
303
}
304
305
static const struct fs_context_operations debugfs_context_ops = {
306
.free = debugfs_free_fc,
307
.parse_param = debugfs_parse_param,
308
.get_tree = debugfs_get_tree,
309
.reconfigure = debugfs_reconfigure,
310
};
311
312
static int debugfs_init_fs_context(struct fs_context *fc)
313
{
314
struct debugfs_fs_info *fsi;
315
316
fsi = kzalloc(sizeof(struct debugfs_fs_info), GFP_KERNEL);
317
if (!fsi)
318
return -ENOMEM;
319
320
fsi->mode = DEBUGFS_DEFAULT_MODE;
321
322
fc->s_fs_info = fsi;
323
fc->ops = &debugfs_context_ops;
324
return 0;
325
}
326
327
static struct file_system_type debug_fs_type = {
328
.owner = THIS_MODULE,
329
.name = "debugfs",
330
.init_fs_context = debugfs_init_fs_context,
331
.parameters = debugfs_param_specs,
332
.kill_sb = kill_litter_super,
333
};
334
MODULE_ALIAS_FS("debugfs");
335
336
/**
337
* debugfs_lookup() - look up an existing debugfs file
338
* @name: a pointer to a string containing the name of the file to look up.
339
* @parent: a pointer to the parent dentry of the file.
340
*
341
* This function will return a pointer to a dentry if it succeeds. If the file
342
* doesn't exist or an error occurs, %NULL will be returned. The returned
343
* dentry must be passed to dput() when it is no longer needed.
344
*
345
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
346
* returned.
347
*/
348
struct dentry *debugfs_lookup(const char *name, struct dentry *parent)
349
{
350
struct dentry *dentry;
351
352
if (!debugfs_initialized() || IS_ERR_OR_NULL(name) || IS_ERR(parent))
353
return NULL;
354
355
if (!parent)
356
parent = debugfs_mount->mnt_root;
357
358
dentry = lookup_noperm_positive_unlocked(&QSTR(name), parent);
359
if (IS_ERR(dentry))
360
return NULL;
361
return dentry;
362
}
363
EXPORT_SYMBOL_GPL(debugfs_lookup);
364
365
static struct dentry *start_creating(const char *name, struct dentry *parent)
366
{
367
struct dentry *dentry;
368
int error;
369
370
if (!(debugfs_allow & DEBUGFS_ALLOW_API))
371
return ERR_PTR(-EPERM);
372
373
if (!debugfs_initialized())
374
return ERR_PTR(-ENOENT);
375
376
pr_debug("creating file '%s'\n", name);
377
378
if (IS_ERR(parent))
379
return parent;
380
381
error = simple_pin_fs(&debug_fs_type, &debugfs_mount,
382
&debugfs_mount_count);
383
if (error) {
384
pr_err("Unable to pin filesystem for file '%s'\n", name);
385
return ERR_PTR(error);
386
}
387
388
/* If the parent is not specified, we create it in the root.
389
* We need the root dentry to do this, which is in the super
390
* block. A pointer to that is in the struct vfsmount that we
391
* have around.
392
*/
393
if (!parent)
394
parent = debugfs_mount->mnt_root;
395
396
dentry = simple_start_creating(parent, name);
397
if (IS_ERR(dentry)) {
398
if (dentry == ERR_PTR(-EEXIST))
399
pr_err("'%s' already exists in '%pd'\n", name, parent);
400
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
401
}
402
return dentry;
403
}
404
405
static struct dentry *failed_creating(struct dentry *dentry)
406
{
407
inode_unlock(d_inode(dentry->d_parent));
408
dput(dentry);
409
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
410
return ERR_PTR(-ENOMEM);
411
}
412
413
static struct dentry *end_creating(struct dentry *dentry)
414
{
415
inode_unlock(d_inode(dentry->d_parent));
416
return dentry;
417
}
418
419
static struct dentry *__debugfs_create_file(const char *name, umode_t mode,
420
struct dentry *parent, void *data,
421
const void *aux,
422
const struct file_operations *proxy_fops,
423
const void *real_fops)
424
{
425
struct dentry *dentry;
426
struct inode *inode;
427
428
if (!(mode & S_IFMT))
429
mode |= S_IFREG;
430
BUG_ON(!S_ISREG(mode));
431
dentry = start_creating(name, parent);
432
433
if (IS_ERR(dentry))
434
return dentry;
435
436
if (!(debugfs_allow & DEBUGFS_ALLOW_API)) {
437
failed_creating(dentry);
438
return ERR_PTR(-EPERM);
439
}
440
441
inode = debugfs_get_inode(dentry->d_sb);
442
if (unlikely(!inode)) {
443
pr_err("out of free dentries, can not create file '%s'\n",
444
name);
445
return failed_creating(dentry);
446
}
447
448
inode->i_mode = mode;
449
inode->i_private = data;
450
451
inode->i_op = &debugfs_file_inode_operations;
452
if (!real_fops)
453
proxy_fops = &debugfs_noop_file_operations;
454
inode->i_fop = proxy_fops;
455
DEBUGFS_I(inode)->raw = real_fops;
456
DEBUGFS_I(inode)->aux = (void *)aux;
457
458
d_instantiate(dentry, inode);
459
fsnotify_create(d_inode(dentry->d_parent), dentry);
460
return end_creating(dentry);
461
}
462
463
struct dentry *debugfs_create_file_full(const char *name, umode_t mode,
464
struct dentry *parent, void *data,
465
const void *aux,
466
const struct file_operations *fops)
467
{
468
return __debugfs_create_file(name, mode, parent, data, aux,
469
&debugfs_full_proxy_file_operations,
470
fops);
471
}
472
EXPORT_SYMBOL_GPL(debugfs_create_file_full);
473
474
struct dentry *debugfs_create_file_short(const char *name, umode_t mode,
475
struct dentry *parent, void *data,
476
const void *aux,
477
const struct debugfs_short_fops *fops)
478
{
479
return __debugfs_create_file(name, mode, parent, data, aux,
480
&debugfs_full_short_proxy_file_operations,
481
fops);
482
}
483
EXPORT_SYMBOL_GPL(debugfs_create_file_short);
484
485
/**
486
* debugfs_create_file_unsafe - create a file in the debugfs filesystem
487
* @name: a pointer to a string containing the name of the file to create.
488
* @mode: the permission that the file should have.
489
* @parent: a pointer to the parent dentry for this file. This should be a
490
* directory dentry if set. If this parameter is NULL, then the
491
* file will be created in the root of the debugfs filesystem.
492
* @data: a pointer to something that the caller will want to get to later
493
* on. The inode.i_private pointer will point to this value on
494
* the open() call.
495
* @fops: a pointer to a struct file_operations that should be used for
496
* this file.
497
*
498
* debugfs_create_file_unsafe() is completely analogous to
499
* debugfs_create_file(), the only difference being that the fops
500
* handed it will not get protected against file removals by the
501
* debugfs core.
502
*
503
* It is your responsibility to protect your struct file_operation
504
* methods against file removals by means of debugfs_file_get()
505
* and debugfs_file_put(). ->open() is still protected by
506
* debugfs though.
507
*
508
* Any struct file_operations defined by means of
509
* DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and
510
* thus, may be used here.
511
*/
512
struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode,
513
struct dentry *parent, void *data,
514
const struct file_operations *fops)
515
{
516
517
return __debugfs_create_file(name, mode, parent, data, NULL,
518
&debugfs_open_proxy_file_operations,
519
fops);
520
}
521
EXPORT_SYMBOL_GPL(debugfs_create_file_unsafe);
522
523
/**
524
* debugfs_create_file_size - create a file in the debugfs filesystem
525
* @name: a pointer to a string containing the name of the file to create.
526
* @mode: the permission that the file should have.
527
* @parent: a pointer to the parent dentry for this file. This should be a
528
* directory dentry if set. If this parameter is NULL, then the
529
* file will be created in the root of the debugfs filesystem.
530
* @data: a pointer to something that the caller will want to get to later
531
* on. The inode.i_private pointer will point to this value on
532
* the open() call.
533
* @fops: a pointer to a struct file_operations that should be used for
534
* this file.
535
* @file_size: initial file size
536
*
537
* This is the basic "create a file" function for debugfs. It allows for a
538
* wide range of flexibility in creating a file, or a directory (if you want
539
* to create a directory, the debugfs_create_dir() function is
540
* recommended to be used instead.)
541
*/
542
void debugfs_create_file_size(const char *name, umode_t mode,
543
struct dentry *parent, void *data,
544
const struct file_operations *fops,
545
loff_t file_size)
546
{
547
struct dentry *de = debugfs_create_file(name, mode, parent, data, fops);
548
549
if (!IS_ERR(de))
550
d_inode(de)->i_size = file_size;
551
}
552
EXPORT_SYMBOL_GPL(debugfs_create_file_size);
553
554
/**
555
* debugfs_create_dir - create a directory in the debugfs filesystem
556
* @name: a pointer to a string containing the name of the directory to
557
* create.
558
* @parent: a pointer to the parent dentry for this file. This should be a
559
* directory dentry if set. If this parameter is NULL, then the
560
* directory will be created in the root of the debugfs filesystem.
561
*
562
* This function creates a directory in debugfs with the given name.
563
*
564
* This function will return a pointer to a dentry if it succeeds. This
565
* pointer must be passed to the debugfs_remove() function when the file is
566
* to be removed (no automatic cleanup happens if your module is unloaded,
567
* you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be
568
* returned.
569
*
570
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
571
* returned.
572
*
573
* NOTE: it's expected that most callers should _ignore_ the errors returned
574
* by this function. Other debugfs functions handle the fact that the "dentry"
575
* passed to them could be an error and they don't crash in that case.
576
* Drivers should generally work fine even if debugfs fails to init anyway.
577
*/
578
struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
579
{
580
struct dentry *dentry = start_creating(name, parent);
581
struct inode *inode;
582
583
if (IS_ERR(dentry))
584
return dentry;
585
586
if (!(debugfs_allow & DEBUGFS_ALLOW_API)) {
587
failed_creating(dentry);
588
return ERR_PTR(-EPERM);
589
}
590
591
inode = debugfs_get_inode(dentry->d_sb);
592
if (unlikely(!inode)) {
593
pr_err("out of free dentries, can not create directory '%s'\n",
594
name);
595
return failed_creating(dentry);
596
}
597
598
inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
599
inode->i_op = &debugfs_dir_inode_operations;
600
inode->i_fop = &simple_dir_operations;
601
602
/* directory inodes start off with i_nlink == 2 (for "." entry) */
603
inc_nlink(inode);
604
d_instantiate(dentry, inode);
605
inc_nlink(d_inode(dentry->d_parent));
606
fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
607
return end_creating(dentry);
608
}
609
EXPORT_SYMBOL_GPL(debugfs_create_dir);
610
611
/**
612
* debugfs_create_automount - create automount point in the debugfs filesystem
613
* @name: a pointer to a string containing the name of the file to create.
614
* @parent: a pointer to the parent dentry for this file. This should be a
615
* directory dentry if set. If this parameter is NULL, then the
616
* file will be created in the root of the debugfs filesystem.
617
* @f: function to be called when pathname resolution steps on that one.
618
* @data: opaque argument to pass to f().
619
*
620
* @f should return what ->d_automount() would.
621
*/
622
struct dentry *debugfs_create_automount(const char *name,
623
struct dentry *parent,
624
debugfs_automount_t f,
625
void *data)
626
{
627
struct dentry *dentry = start_creating(name, parent);
628
struct inode *inode;
629
630
if (IS_ERR(dentry))
631
return dentry;
632
633
if (!(debugfs_allow & DEBUGFS_ALLOW_API)) {
634
failed_creating(dentry);
635
return ERR_PTR(-EPERM);
636
}
637
638
inode = debugfs_get_inode(dentry->d_sb);
639
if (unlikely(!inode)) {
640
pr_err("out of free dentries, can not create automount '%s'\n",
641
name);
642
return failed_creating(dentry);
643
}
644
645
make_empty_dir_inode(inode);
646
inode->i_flags |= S_AUTOMOUNT;
647
inode->i_private = data;
648
DEBUGFS_I(inode)->automount = f;
649
/* directory inodes start off with i_nlink == 2 (for "." entry) */
650
inc_nlink(inode);
651
d_instantiate(dentry, inode);
652
inc_nlink(d_inode(dentry->d_parent));
653
fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
654
return end_creating(dentry);
655
}
656
EXPORT_SYMBOL(debugfs_create_automount);
657
658
/**
659
* debugfs_create_symlink- create a symbolic link in the debugfs filesystem
660
* @name: a pointer to a string containing the name of the symbolic link to
661
* create.
662
* @parent: a pointer to the parent dentry for this symbolic link. This
663
* should be a directory dentry if set. If this parameter is NULL,
664
* then the symbolic link will be created in the root of the debugfs
665
* filesystem.
666
* @target: a pointer to a string containing the path to the target of the
667
* symbolic link.
668
*
669
* This function creates a symbolic link with the given name in debugfs that
670
* links to the given target path.
671
*
672
* This function will return a pointer to a dentry if it succeeds. This
673
* pointer must be passed to the debugfs_remove() function when the symbolic
674
* link is to be removed (no automatic cleanup happens if your module is
675
* unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR)
676
* will be returned.
677
*
678
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
679
* returned.
680
*/
681
struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
682
const char *target)
683
{
684
struct dentry *dentry;
685
struct inode *inode;
686
char *link = kstrdup(target, GFP_KERNEL);
687
if (!link)
688
return ERR_PTR(-ENOMEM);
689
690
dentry = start_creating(name, parent);
691
if (IS_ERR(dentry)) {
692
kfree(link);
693
return dentry;
694
}
695
696
inode = debugfs_get_inode(dentry->d_sb);
697
if (unlikely(!inode)) {
698
pr_err("out of free dentries, can not create symlink '%s'\n",
699
name);
700
kfree(link);
701
return failed_creating(dentry);
702
}
703
inode->i_mode = S_IFLNK | S_IRWXUGO;
704
inode->i_op = &debugfs_symlink_inode_operations;
705
inode->i_link = link;
706
d_instantiate(dentry, inode);
707
return end_creating(dentry);
708
}
709
EXPORT_SYMBOL_GPL(debugfs_create_symlink);
710
711
static void __debugfs_file_removed(struct dentry *dentry)
712
{
713
struct debugfs_fsdata *fsd;
714
715
/*
716
* Paired with the closing smp_mb() implied by a successful
717
* cmpxchg() in debugfs_file_get(): either
718
* debugfs_file_get() must see a dead dentry or we must see a
719
* debugfs_fsdata instance at ->d_fsdata here (or both).
720
*/
721
smp_mb();
722
fsd = READ_ONCE(dentry->d_fsdata);
723
if (!fsd)
724
return;
725
726
/* if this was the last reference, we're done */
727
if (refcount_dec_and_test(&fsd->active_users))
728
return;
729
730
/*
731
* If there's still a reference, the code that obtained it can
732
* be in different states:
733
* - The common case of not using cancellations, or already
734
* after debugfs_leave_cancellation(), where we just need
735
* to wait for debugfs_file_put() which signals the completion;
736
* - inside a cancellation section, i.e. between
737
* debugfs_enter_cancellation() and debugfs_leave_cancellation(),
738
* in which case we need to trigger the ->cancel() function,
739
* and then wait for debugfs_file_put() just like in the
740
* previous case;
741
* - before debugfs_enter_cancellation() (but obviously after
742
* debugfs_file_get()), in which case we may not see the
743
* cancellation in the list on the first round of the loop,
744
* but debugfs_enter_cancellation() signals the completion
745
* after adding it, so this code gets woken up to call the
746
* ->cancel() function.
747
*/
748
while (refcount_read(&fsd->active_users)) {
749
struct debugfs_cancellation *c;
750
751
/*
752
* Lock the cancellations. Note that the cancellations
753
* structs are meant to be on the stack, so we need to
754
* ensure we either use them here or don't touch them,
755
* and debugfs_leave_cancellation() will wait for this
756
* to be finished processing before exiting one. It may
757
* of course win and remove the cancellation, but then
758
* chances are we never even got into this bit, we only
759
* do if the refcount isn't zero already.
760
*/
761
mutex_lock(&fsd->cancellations_mtx);
762
while ((c = list_first_entry_or_null(&fsd->cancellations,
763
typeof(*c), list))) {
764
list_del_init(&c->list);
765
c->cancel(dentry, c->cancel_data);
766
}
767
mutex_unlock(&fsd->cancellations_mtx);
768
769
wait_for_completion(&fsd->active_users_drained);
770
}
771
}
772
773
static void remove_one(struct dentry *victim)
774
{
775
if (d_is_reg(victim))
776
__debugfs_file_removed(victim);
777
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
778
}
779
780
/**
781
* debugfs_remove - recursively removes a directory
782
* @dentry: a pointer to a the dentry of the directory to be removed. If this
783
* parameter is NULL or an error value, nothing will be done.
784
*
785
* This function recursively removes a directory tree in debugfs that
786
* was previously created with a call to another debugfs function
787
* (like debugfs_create_file() or variants thereof.)
788
*
789
* This function is required to be called in order for the file to be
790
* removed, no automatic cleanup of files will happen when a module is
791
* removed, you are responsible here.
792
*/
793
void debugfs_remove(struct dentry *dentry)
794
{
795
if (IS_ERR_OR_NULL(dentry))
796
return;
797
798
simple_pin_fs(&debug_fs_type, &debugfs_mount, &debugfs_mount_count);
799
simple_recursive_removal(dentry, remove_one);
800
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
801
}
802
EXPORT_SYMBOL_GPL(debugfs_remove);
803
804
/**
805
* debugfs_lookup_and_remove - lookup a directory or file and recursively remove it
806
* @name: a pointer to a string containing the name of the item to look up.
807
* @parent: a pointer to the parent dentry of the item.
808
*
809
* This is the equlivant of doing something like
810
* debugfs_remove(debugfs_lookup(..)) but with the proper reference counting
811
* handled for the directory being looked up.
812
*/
813
void debugfs_lookup_and_remove(const char *name, struct dentry *parent)
814
{
815
struct dentry *dentry;
816
817
dentry = debugfs_lookup(name, parent);
818
if (!dentry)
819
return;
820
821
debugfs_remove(dentry);
822
dput(dentry);
823
}
824
EXPORT_SYMBOL_GPL(debugfs_lookup_and_remove);
825
826
/**
827
* debugfs_change_name - rename a file/directory in the debugfs filesystem
828
* @dentry: dentry of an object to be renamed.
829
* @fmt: format for new name
830
*
831
* This function renames a file/directory in debugfs. The target must not
832
* exist for rename to succeed.
833
*
834
* This function will return 0 on success and -E... on failure.
835
*
836
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
837
* returned.
838
*/
839
int __printf(2, 3) debugfs_change_name(struct dentry *dentry, const char *fmt, ...)
840
{
841
int error = 0;
842
const char *new_name;
843
struct name_snapshot old_name;
844
struct dentry *parent, *target;
845
struct inode *dir;
846
va_list ap;
847
848
if (IS_ERR_OR_NULL(dentry))
849
return 0;
850
851
va_start(ap, fmt);
852
new_name = kvasprintf_const(GFP_KERNEL, fmt, ap);
853
va_end(ap);
854
if (!new_name)
855
return -ENOMEM;
856
857
parent = dget_parent(dentry);
858
dir = d_inode(parent);
859
inode_lock(dir);
860
861
take_dentry_name_snapshot(&old_name, dentry);
862
863
if (WARN_ON_ONCE(dentry->d_parent != parent)) {
864
error = -EINVAL;
865
goto out;
866
}
867
if (strcmp(old_name.name.name, new_name) == 0)
868
goto out;
869
target = lookup_noperm(&QSTR(new_name), parent);
870
if (IS_ERR(target)) {
871
error = PTR_ERR(target);
872
goto out;
873
}
874
if (d_really_is_positive(target)) {
875
dput(target);
876
error = -EINVAL;
877
goto out;
878
}
879
simple_rename_timestamp(dir, dentry, dir, target);
880
d_move(dentry, target);
881
dput(target);
882
fsnotify_move(dir, dir, &old_name.name, d_is_dir(dentry), NULL, dentry);
883
out:
884
release_dentry_name_snapshot(&old_name);
885
inode_unlock(dir);
886
dput(parent);
887
kfree_const(new_name);
888
return error;
889
}
890
EXPORT_SYMBOL_GPL(debugfs_change_name);
891
892
/**
893
* debugfs_initialized - Tells whether debugfs has been registered
894
*/
895
bool debugfs_initialized(void)
896
{
897
return debugfs_registered;
898
}
899
EXPORT_SYMBOL_GPL(debugfs_initialized);
900
901
static int __init debugfs_kernel(char *str)
902
{
903
if (str) {
904
if (!strcmp(str, "on"))
905
debugfs_allow = DEBUGFS_ALLOW_API | DEBUGFS_ALLOW_MOUNT;
906
else if (!strcmp(str, "no-mount"))
907
debugfs_allow = DEBUGFS_ALLOW_API;
908
else if (!strcmp(str, "off"))
909
debugfs_allow = 0;
910
}
911
912
return 0;
913
}
914
early_param("debugfs", debugfs_kernel);
915
static int __init debugfs_init(void)
916
{
917
int retval;
918
919
if (!(debugfs_allow & DEBUGFS_ALLOW_MOUNT))
920
return -EPERM;
921
922
retval = sysfs_create_mount_point(kernel_kobj, "debug");
923
if (retval)
924
return retval;
925
926
debugfs_inode_cachep = kmem_cache_create("debugfs_inode_cache",
927
sizeof(struct debugfs_inode_info), 0,
928
SLAB_RECLAIM_ACCOUNT | SLAB_ACCOUNT,
929
init_once);
930
if (debugfs_inode_cachep == NULL) {
931
sysfs_remove_mount_point(kernel_kobj, "debug");
932
return -ENOMEM;
933
}
934
935
retval = register_filesystem(&debug_fs_type);
936
if (retval) { // Really not going to happen
937
sysfs_remove_mount_point(kernel_kobj, "debug");
938
kmem_cache_destroy(debugfs_inode_cachep);
939
return retval;
940
}
941
debugfs_registered = true;
942
return 0;
943
}
944
core_initcall(debugfs_init);
945
946