debugfs: unproxify files created through debugfs_create_blob()
Currently, the struct file_operations fops_blob associated with files created through the debugfs_create_blob() helpers are not file lifetime aware. Thus, a lifetime managing proxy is created around fops_blob each time such a file is opened which is an unnecessary waste of resources. Implement file lifetime management for the fops_bool file_operations. Namely, make read_file_blob() safe gainst file removals by means of debugfs_use_file_start() and debugfs_use_file_finish(). Make debugfs_create_blob() create its files in non-proxying operation mode by means of debugfs_create_file_unsafe(). Signed-off-by: Nicolai Stange <nicstange@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4d45f7974c
commit
83b711cbf4
|
@ -842,8 +842,15 @@ static ssize_t read_file_blob(struct file *file, char __user *user_buf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct debugfs_blob_wrapper *blob = file->private_data;
|
struct debugfs_blob_wrapper *blob = file->private_data;
|
||||||
return simple_read_from_buffer(user_buf, count, ppos, blob->data,
|
ssize_t r;
|
||||||
blob->size);
|
int srcu_idx;
|
||||||
|
|
||||||
|
r = debugfs_use_file_start(F_DENTRY(file), &srcu_idx);
|
||||||
|
if (likely(!r))
|
||||||
|
r = simple_read_from_buffer(user_buf, count, ppos, blob->data,
|
||||||
|
blob->size);
|
||||||
|
debugfs_use_file_finish(srcu_idx);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct file_operations fops_blob = {
|
static const struct file_operations fops_blob = {
|
||||||
|
@ -880,7 +887,7 @@ struct dentry *debugfs_create_blob(const char *name, umode_t mode,
|
||||||
struct dentry *parent,
|
struct dentry *parent,
|
||||||
struct debugfs_blob_wrapper *blob)
|
struct debugfs_blob_wrapper *blob)
|
||||||
{
|
{
|
||||||
return debugfs_create_file(name, mode, parent, blob, &fops_blob);
|
return debugfs_create_file_unsafe(name, mode, parent, blob, &fops_blob);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(debugfs_create_blob);
|
EXPORT_SYMBOL_GPL(debugfs_create_blob);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue