summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Morris <jmorris@redhat.com>2004-10-25 04:14:02 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-10-25 04:14:02 -0700
commite7ddba032a9efac9f865b7836e070bea6aec1ecc (patch)
treeb79c8ede804f3747766863c5f25ca41fe20cd758
parente9eef9fed769a1fd5cf91128767b06668dd6cd29 (diff)
[PATCH] Add d_alloc_name() to libfs
This patch consolidates several occurrences of duplicated code into a new libfs function d_alloc_name(). Signed-off-by: James Morris <jmorris@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/misc/ibmasm/ibmasmfs.c13
-rw-r--r--drivers/oprofile/oprofilefs.c14
-rw-r--r--drivers/usb/gadget/inode.c6
-rw-r--r--fs/dcache.c10
-rw-r--r--fs/libfs.c7
-rw-r--r--include/linux/fs.h1
-rw-r--r--net/sunrpc/rpc_pipe.c6
-rw-r--r--security/selinux/selinuxfs.c17
8 files changed, 24 insertions, 50 deletions
diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index cdacb25d9a86..02f4f789c6f4 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -173,13 +173,8 @@ static struct dentry *ibmasmfs_create_file (struct super_block *sb,
{
struct dentry *dentry;
struct inode *inode;
- struct qstr qname;
- qname.name = name;
- qname.len = strlen (name);
- qname.hash = full_name_hash(name, qname.len);
-
- dentry = d_alloc(parent, &qname);
+ dentry = d_alloc_name(parent, name);
if (!dentry)
return NULL;
@@ -202,12 +197,8 @@ static struct dentry *ibmasmfs_create_dir (struct super_block *sb,
{
struct dentry *dentry;
struct inode *inode;
- struct qstr qname;
- qname.name = name;
- qname.len = strlen (name);
- qname.hash = full_name_hash(name, qname.len);
- dentry = d_alloc(parent, &qname);
+ dentry = d_alloc_name(parent, name);
if (!dentry)
return NULL;
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
index d9746f1b5137..17c0aa8fe593 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
@@ -135,11 +135,8 @@ static struct dentry * __oprofilefs_create_file(struct super_block * sb,
{
struct dentry * dentry;
struct inode * inode;
- struct qstr qname;
- qname.name = name;
- qname.len = strlen(name);
- qname.hash = full_name_hash(qname.name, qname.len);
- dentry = d_alloc(root, &qname);
+
+ dentry = d_alloc_name(root, name);
if (!dentry)
return NULL;
inode = oprofilefs_get_inode(sb, S_IFREG | perm);
@@ -228,11 +225,8 @@ struct dentry * oprofilefs_mkdir(struct super_block * sb,
{
struct dentry * dentry;
struct inode * inode;
- struct qstr qname;
- qname.name = name;
- qname.len = strlen(name);
- qname.hash = full_name_hash(qname.name, qname.len);
- dentry = d_alloc(root, &qname);
+
+ dentry = d_alloc_name(root, name);
if (!dentry)
return NULL;
inode = oprofilefs_get_inode(sb, S_IFDIR | 0755);
diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c
index f5e146225b88..638b7eaf189b 100644
--- a/drivers/usb/gadget/inode.c
+++ b/drivers/usb/gadget/inode.c
@@ -1981,12 +1981,8 @@ gadgetfs_create_file (struct super_block *sb, char const *name,
{
struct dentry *dentry;
struct inode *inode;
- struct qstr qname;
- qname.name = name;
- qname.len = strlen (name);
- qname.hash = full_name_hash (qname.name, qname.len);
- dentry = d_alloc (sb->s_root, &qname);
+ dentry = d_alloc_name(sb->s_root, name);
if (!dentry)
return NULL;
diff --git a/fs/dcache.c b/fs/dcache.c
index 9918e4fab786..0bcaaa00d7a5 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -743,6 +743,16 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
return dentry;
}
+struct dentry *d_alloc_name(struct dentry *parent, const char *name)
+{
+ struct qstr q;
+
+ q.name = name;
+ q.len = strlen(name);
+ q.hash = full_name_hash(q.name, q.len);
+ return d_alloc(parent, &q);
+}
+
/**
* d_instantiate - fill in inode information for a dentry
* @entry: dentry to complete
diff --git a/fs/libfs.c b/fs/libfs.c
index 5d3f82bbc8b8..fe8d6e2e6188 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -391,13 +391,9 @@ int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files
return -ENOMEM;
}
for (i = 0; !files->name || files->name[0]; i++, files++) {
- struct qstr name;
if (!files->name)
continue;
- name.name = files->name;
- name.len = strlen(name.name);
- name.hash = full_name_hash(name.name, name.len);
- dentry = d_alloc(root, &name);
+ dentry = d_alloc_name(root, files->name);
if (!dentry)
goto out;
inode = new_inode(s);
@@ -530,6 +526,7 @@ EXPORT_SYMBOL(simple_commit_write);
EXPORT_SYMBOL(simple_dir_inode_operations);
EXPORT_SYMBOL(simple_dir_operations);
EXPORT_SYMBOL(simple_empty);
+EXPORT_SYMBOL(d_alloc_name);
EXPORT_SYMBOL(simple_fill_super);
EXPORT_SYMBOL(simple_getattr);
EXPORT_SYMBOL(simple_link);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 4a9463c662ed..78978b2a5c25 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1571,6 +1571,7 @@ extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
extern struct file_operations simple_dir_operations;
extern struct inode_operations simple_dir_inode_operations;
struct tree_descr { char *name; struct file_operations *ops; int mode; };
+struct dentry *d_alloc_name(struct dentry *, const char *);
extern int simple_fill_super(struct super_block *, int, struct tree_descr *);
extern int simple_pin_fs(char *name, struct vfsmount **mount, int *count);
extern void simple_release_fs(struct vfsmount **mount, int *count);
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 95ce716823d8..11872a8a94be 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -523,16 +523,12 @@ rpc_populate(struct dentry *parent,
{
struct inode *inode, *dir = parent->d_inode;
void *private = RPC_I(dir)->private;
- struct qstr name;
struct dentry *dentry;
int mode, i;
down(&dir->i_sem);
for (i = start; i < eof; i++) {
- name.name = files[i].name;
- name.len = strlen(name.name);
- name.hash = full_name_hash(name.name, name.len);
- dentry = d_alloc(parent, &name);
+ dentry = d_alloc_name(parent, files[i].name);
if (!dentry)
goto out_bad;
mode = files[i].mode;
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index 57c2c8eaf060..9731ff21e153 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -818,7 +818,6 @@ static int sel_make_bools(void)
struct dentry *dir = bool_dir;
struct inode *inode = NULL;
struct inode_security_struct *isec;
- struct qstr qname;
char **names = NULL, *page;
int num;
int *values = NULL;
@@ -838,10 +837,7 @@ static int sel_make_bools(void)
goto out;
for (i = 0; i < num; i++) {
- qname.name = names[i];
- qname.len = strlen(qname.name);
- qname.hash = full_name_hash(qname.name, qname.len);
- dentry = d_alloc(dir, &qname);
+ dentry = d_alloc_name(dir, names[i]);
if (!dentry) {
ret = -ENOMEM;
goto err;
@@ -896,7 +892,6 @@ static int sel_fill_super(struct super_block * sb, void * data, int silent)
int ret;
struct dentry *dentry;
struct inode *inode;
- struct qstr qname;
struct inode_security_struct *isec;
static struct tree_descr selinux_files[] = {
@@ -917,10 +912,7 @@ static int sel_fill_super(struct super_block * sb, void * data, int silent)
if (ret)
return ret;
- qname.name = BOOL_DIR_NAME;
- qname.len = strlen(qname.name);
- qname.hash = full_name_hash(qname.name, qname.len);
- dentry = d_alloc(sb->s_root, &qname);
+ dentry = d_alloc_name(sb->s_root, BOOL_DIR_NAME);
if (!dentry)
return -ENOMEM;
@@ -935,10 +927,7 @@ static int sel_fill_super(struct super_block * sb, void * data, int silent)
if (ret)
goto out;
- qname.name = NULL_FILE_NAME;
- qname.len = strlen(qname.name);
- qname.hash = full_name_hash(qname.name, qname.len);
- dentry = d_alloc(sb->s_root, &qname);
+ dentry = d_alloc_name(sb->s_root, NULL_FILE_NAME);
if (!dentry)
return -ENOMEM;