Commit e59b4e91 authored by David Howells's avatar David Howells Committed by Al Viro

debugfs: Provide a file creation function that also takes an initial size

Provide a file creation function that also takes an initial size so that the
caller doesn't have to set i_size, thus meaning that we don't have to call
deal with ->d_inode in the callers.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 77b3da6e
...@@ -700,37 +700,24 @@ static const struct file_operations ep_debugfs_fops = { ...@@ -700,37 +700,24 @@ static const struct file_operations ep_debugfs_fops = {
static int setup_debugfs(struct c4iw_dev *devp) static int setup_debugfs(struct c4iw_dev *devp)
{ {
struct dentry *de;
if (!devp->debugfs_root) if (!devp->debugfs_root)
return -1; return -1;
de = debugfs_create_file("qps", S_IWUSR, devp->debugfs_root, debugfs_create_file_size("qps", S_IWUSR, devp->debugfs_root,
(void *)devp, &qp_debugfs_fops); (void *)devp, &qp_debugfs_fops, 4096);
if (de && de->d_inode)
de->d_inode->i_size = 4096;
de = debugfs_create_file("stags", S_IWUSR, devp->debugfs_root, debugfs_create_file_size("stags", S_IWUSR, devp->debugfs_root,
(void *)devp, &stag_debugfs_fops); (void *)devp, &stag_debugfs_fops, 4096);
if (de && de->d_inode)
de->d_inode->i_size = 4096;
de = debugfs_create_file("stats", S_IWUSR, devp->debugfs_root, debugfs_create_file_size("stats", S_IWUSR, devp->debugfs_root,
(void *)devp, &stats_debugfs_fops); (void *)devp, &stats_debugfs_fops, 4096);
if (de && de->d_inode)
de->d_inode->i_size = 4096;
de = debugfs_create_file("eps", S_IWUSR, devp->debugfs_root, debugfs_create_file_size("eps", S_IWUSR, devp->debugfs_root,
(void *)devp, &ep_debugfs_fops); (void *)devp, &ep_debugfs_fops, 4096);
if (de && de->d_inode)
de->d_inode->i_size = 4096;
if (c4iw_wr_log) { if (c4iw_wr_log)
de = debugfs_create_file("wr_log", S_IWUSR, devp->debugfs_root, debugfs_create_file_size("wr_log", S_IWUSR, devp->debugfs_root,
(void *)devp, &wr_log_debugfs_fops); (void *)devp, &wr_log_debugfs_fops, 4096);
if (de && de->d_inode)
de->d_inode->i_size = 4096;
}
return 0; return 0;
} }
......
...@@ -91,12 +91,9 @@ static const struct file_operations mem_debugfs_fops = { ...@@ -91,12 +91,9 @@ static const struct file_operations mem_debugfs_fops = {
static void add_debugfs_mem(struct adapter *adap, const char *name, static void add_debugfs_mem(struct adapter *adap, const char *name,
unsigned int idx, unsigned int size_mb) unsigned int idx, unsigned int size_mb)
{ {
struct dentry *de; debugfs_create_file_size(name, S_IRUSR, adap->debugfs_root,
(void *)adap + idx, &mem_debugfs_fops,
de = debugfs_create_file(name, S_IRUSR, adap->debugfs_root, size_mb << 20);
(void *)adap + idx, &mem_debugfs_fops);
if (de && de->d_inode)
de->d_inode->i_size = size_mb << 20;
} }
/* Add an array of Debug FS files. /* Add an array of Debug FS files.
......
...@@ -113,12 +113,9 @@ static const struct file_operations csio_mem_debugfs_fops = { ...@@ -113,12 +113,9 @@ static const struct file_operations csio_mem_debugfs_fops = {
void csio_add_debugfs_mem(struct csio_hw *hw, const char *name, void csio_add_debugfs_mem(struct csio_hw *hw, const char *name,
unsigned int idx, unsigned int size_mb) unsigned int idx, unsigned int size_mb)
{ {
struct dentry *de; debugfs_create_file_size(name, S_IRUSR, hw->debugfs_root,
(void *)hw + idx, &csio_mem_debugfs_fops,
de = debugfs_create_file(name, S_IRUSR, hw->debugfs_root, size_mb << 20);
(void *)hw + idx, &csio_mem_debugfs_fops);
if (de && de->d_inode)
de->d_inode->i_size = size_mb << 20;
} }
static int csio_setup_debugfs(struct csio_hw *hw) static int csio_setup_debugfs(struct csio_hw *hw)
......
...@@ -264,14 +264,17 @@ static void usba_init_debugfs(struct usba_udc *udc) ...@@ -264,14 +264,17 @@ static void usba_init_debugfs(struct usba_udc *udc)
goto err_root; goto err_root;
udc->debugfs_root = root; udc->debugfs_root = root;
regs = debugfs_create_file("regs", 0400, root, udc, &regs_dbg_fops);
if (!regs)
goto err_regs;
regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM, regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM,
CTRL_IOMEM_ID); CTRL_IOMEM_ID);
regs->d_inode->i_size = resource_size(regs_resource);
if (regs_resource) {
regs = debugfs_create_file_size("regs", 0400, root, udc,
&regs_dbg_fops,
resource_size(regs_resource));
if (!regs)
goto err_regs;
udc->debugfs_regs = regs; udc->debugfs_regs = regs;
}
usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0)); usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0));
......
...@@ -337,6 +337,46 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode, ...@@ -337,6 +337,46 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
} }
EXPORT_SYMBOL_GPL(debugfs_create_file); EXPORT_SYMBOL_GPL(debugfs_create_file);
/**
* debugfs_create_file_size - create a file in the debugfs filesystem
* @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 parameter is NULL, then the
* file will be created in the root of the debugfs filesystem.
* @data: a pointer to something that the caller will want to get to later
* on. The inode.i_private pointer will point to this value on
* the open() call.
* @fops: a pointer to a struct file_operations that should be used for
* this file.
* @file_size: initial file size
*
* This is the basic "create a file" function for debugfs. It allows for a
* wide range of flexibility in creating a file, or a directory (if you want
* to create a directory, the debugfs_create_dir() function is
* recommended to be used instead.)
*
* 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.
*/
struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
struct dentry *parent, void *data,
const struct file_operations *fops,
loff_t file_size)
{
struct dentry *de = debugfs_create_file(name, mode, parent, data, fops);
if (de)
de->d_inode->i_size = file_size;
return de;
}
EXPORT_SYMBOL_GPL(debugfs_create_file_size);
/** /**
* debugfs_create_dir - create a directory in the debugfs filesystem * debugfs_create_dir - create a directory in the debugfs filesystem
* @name: a pointer to a string containing the name of the directory to * @name: a pointer to a string containing the name of the directory to
......
...@@ -51,6 +51,11 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode, ...@@ -51,6 +51,11 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
struct dentry *parent, void *data, struct dentry *parent, void *data,
const struct file_operations *fops); const struct file_operations *fops);
struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
struct dentry *parent, void *data,
const struct file_operations *fops,
loff_t file_size);
struct dentry *debugfs_create_dir(const char *name, struct dentry *parent); struct dentry *debugfs_create_dir(const char *name, struct dentry *parent);
struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
...@@ -129,6 +134,14 @@ static inline struct dentry *debugfs_create_file(const char *name, umode_t mode, ...@@ -129,6 +134,14 @@ static inline struct dentry *debugfs_create_file(const char *name, umode_t mode,
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
} }
static inline struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
struct dentry *parent, void *data,
const struct file_operations *fops,
loff_t file_size)
{
return ERR_PTR(-ENODEV);
}
static inline struct dentry *debugfs_create_dir(const char *name, static inline struct dentry *debugfs_create_dir(const char *name,
struct dentry *parent) struct dentry *parent)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment