Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1333393
| From | Nicolai Stange <nicstange@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v3 6/7] debugfs: unproxify files created through debugfs_create_blob() |
| Date | 2016-02-14 02:40 +0100 |
| Message-ID | <r1TPk-4oo-13@gated-at.bofh.it> (permalink) |
| References | <r1TPj-4oo-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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>
---
fs/debugfs/file.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
index da24e0b..036ec3f 100644
--- a/fs/debugfs/file.c
+++ b/fs/debugfs/file.c
@@ -843,8 +843,15 @@ static ssize_t read_file_blob(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
struct debugfs_blob_wrapper *blob = file->private_data;
- return simple_read_from_buffer(user_buf, count, ppos, blob->data,
- blob->size);
+ ssize_t r;
+ 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 = {
@@ -881,7 +888,7 @@ struct dentry *debugfs_create_blob(const char *name, umode_t mode,
struct dentry *parent,
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);
--
2.7.1
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v3 0/7] fix debugfs file removal races Nicolai Stange <nicstange@gmail.com> - 2016-02-14 02:40 +0100 [PATCH v3 6/7] debugfs: unproxify files created through debugfs_create_blob() Nicolai Stange <nicstange@gmail.com> - 2016-02-14 02:40 +0100 [PATCH v3 1/7] debugfs: prevent access to possibly dead file_operations at file open Nicolai Stange <nicstange@gmail.com> - 2016-02-14 02:40 +0100 [PATCH v3 7/7] debugfs: unproxify files created through debugfs_create_u32_array() Nicolai Stange <nicstange@gmail.com> - 2016-02-14 02:40 +0100 [PATCH v3 2/7] debugfs: prevent access to removed files' private data Nicolai Stange <nicstange@gmail.com> - 2016-02-14 02:40 +0100 [PATCH v3.1 4/7] debugfs: unproxify attribute files created through debugfs_create_*() Nicolai Stange <nicstange@gmail.com> - 2016-02-14 02:50 +0100
csiph-web