From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Michael Ellerman <michael@ellerman.id.au>,
Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 19/23] debugfs: Add debugfs_create_blob() helper for exporting binary data
Date: Mon, 20 Mar 2006 14:00:39 -0800 [thread overview]
Message-ID: <11428920392452-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <11428920391787-git-send-email-gregkh@suse.de>
I wanted to export a binary blob via debugfs, and although it was pretty easy
it seems like it'd be easier if there was a helper for it. It's a pity we need
the wrapper struct but I can't see a cleaner way to do it.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/debugfs/file.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
include/linux/debugfs.h | 15 +++++++++++++++
2 files changed, 61 insertions(+), 0 deletions(-)
dd308bc355a1aa4f202fe9a3133b6c676cb9606c
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
index d575452..40c4fc9 100644
--- a/fs/debugfs/file.c
+++ b/fs/debugfs/file.c
@@ -251,3 +251,49 @@ struct dentry *debugfs_create_bool(const
}
EXPORT_SYMBOL_GPL(debugfs_create_bool);
+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);
+}
+
+static struct file_operations fops_blob = {
+ .read = read_file_blob,
+ .open = default_open,
+};
+
+/**
+ * debugfs_create_blob - create a file in the debugfs filesystem that is
+ * used to read and write a binary blob.
+ *
+ * @name: a pointer to a string containing the name of the file to create.
+ * @mode: the permission that the file should have
+ * @parent: a pointer to the parent dentry for this file. This should be a
+ * directory dentry if set. If this paramater is NULL, then the
+ * file will be created in the root of the debugfs filesystem.
+ * @blob: a pointer to a struct debugfs_blob_wrapper which contains a pointer
+ * to the blob data and the size of the data.
+ *
+ * This function creates a file in debugfs with the given name that exports
+ * @blob->data as a binary blob. If the @mode variable is so set it can be
+ * read from. Writing is not supported.
+ *
+ * This function will return a pointer to a dentry if it succeeds. This
+ * pointer must be passed to the debugfs_remove() function when the file is
+ * to be removed (no automatic cleanup happens if your module is unloaded,
+ * you are responsible here.) If an error occurs, NULL will be returned.
+ *
+ * If debugfs is not enabled in the kernel, the value -ENODEV will be
+ * returned. It is not wise to check for this value, but rather, check for
+ * NULL or !NULL instead as to eliminate the need for #ifdef in the calling
+ * code.
+ */
+struct dentry *debugfs_create_blob(const char *name, mode_t mode,
+ struct dentry *parent,
+ struct debugfs_blob_wrapper *blob)
+{
+ return debugfs_create_file(name, mode, parent, blob, &fops_blob);
+}
+EXPORT_SYMBOL_GPL(debugfs_create_blob);
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h
index a5fa6a6..4b0428e 100644
--- a/include/linux/debugfs.h
+++ b/include/linux/debugfs.h
@@ -21,6 +21,11 @@
struct file_operations;
+struct debugfs_blob_wrapper {
+ void *data;
+ unsigned long size;
+};
+
#if defined(CONFIG_DEBUG_FS)
struct dentry *debugfs_create_file(const char *name, mode_t mode,
struct dentry *parent, void *data,
@@ -39,6 +44,9 @@ struct dentry *debugfs_create_u32(const
struct dentry *debugfs_create_bool(const char *name, mode_t mode,
struct dentry *parent, u32 *value);
+struct dentry *debugfs_create_blob(const char *name, mode_t mode,
+ struct dentry *parent,
+ struct debugfs_blob_wrapper *blob);
#else
#include <linux/err.h>
@@ -94,6 +102,13 @@ static inline struct dentry *debugfs_cre
return ERR_PTR(-ENODEV);
}
+static inline struct dentry *debugfs_create_blob(const char *name, mode_t mode,
+ struct dentry *parent,
+ struct debugfs_blob_wrapper *blob)
+{
+ return ERR_PTR(-ENODEV);
+}
+
#endif
#endif
--
1.2.4
next prev parent reply other threads:[~2006-03-20 22:02 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-20 21:50 [GIT PATCH] Driver Core and sysfs stuff for 2.6.16 Greg KH
2006-03-20 22:00 ` [PATCH 01/23] sysfs: sysfs_remove_dir() needs to invalidate the dentry Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 02/23] kobject: fix build error if CONFIG_SYSFS=n Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 03/23] Mark empty release functions as broken Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 04/23] driver core: platform_get_irq*(): return -ENXIO on error Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 05/23] handle errors returned by platform_get_irq*() Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 06/23] kref: avoid an atomic operation in kref_put() Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 07/23] kobj_map semaphore to mutex conversion Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 08/23] Clean up module.c symbol searching logic Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 09/23] add EXPORT_SYMBOL_GPL_FUTURE() Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 12/23] fix module sysfs files reference counting Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 13/23] sysfs: kzalloc conversion Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 14/23] firmware: fix BUG: in fw_realloc_buffer Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 15/23] Driver core: add macros notice(), dev_notice() Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 16/23] Kobject: provide better warning messages when people do stupid things Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 17/23] Kobject: kobject.h: fix a typo Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 18/23] sysfs: fix problem with duplicate sysfs directories and files Greg Kroah-Hartman
2006-03-20 22:00 ` Greg Kroah-Hartman [this message]
2006-03-20 22:00 ` [PATCH 20/23] kobject_add_dir Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 21/23] get_cpu_sysdev() signedness fix Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 22/23] sysfs: don't export dir symbols Greg Kroah-Hartman
2006-03-20 22:00 ` [PATCH 23/23] sysfs: fix a kobject leak in sysfs_add_link on the error path Greg Kroah-Hartman
2006-03-21 17:16 ` [PATCH 16/23] Kobject: provide better warning messages when people do stupid things Artem B. Bityutskiy
2006-03-22 22:17 ` Greg KH
2006-03-25 8:52 ` Artem B. Bityutskiy
2006-03-20 22:00 ` [PATCH 10/23] add EXPORT_SYMBOL_GPL_FUTURE() to RCU subsystem Greg Kroah-Hartman
2006-03-21 0:13 ` [PATCH 04/23] driver core: platform_get_irq*(): return -ENXIO on error Olivier Galibert
2006-03-21 8:07 ` Russell King
2006-03-21 12:50 ` Olivier Galibert
2006-03-21 20:31 ` Russell King
2006-03-21 22:50 ` Olivier Galibert
2006-03-21 9:33 ` David Vrabel
2006-03-20 23:35 ` [PATCH 02/23] kobject: fix build error if CONFIG_SYSFS=n Jun'ichi Nomura
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11428920392452-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=michael@ellerman.id.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.