diff options
| author | James Morris <jmorris@redhat.com> | 2004-10-25 04:14:02 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-10-25 04:14:02 -0700 |
| commit | e7ddba032a9efac9f865b7836e070bea6aec1ecc (patch) | |
| tree | b79c8ede804f3747766863c5f25ca41fe20cd758 | |
| parent | e9eef9fed769a1fd5cf91128767b06668dd6cd29 (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.c | 13 | ||||
| -rw-r--r-- | drivers/oprofile/oprofilefs.c | 14 | ||||
| -rw-r--r-- | drivers/usb/gadget/inode.c | 6 | ||||
| -rw-r--r-- | fs/dcache.c | 10 | ||||
| -rw-r--r-- | fs/libfs.c | 7 | ||||
| -rw-r--r-- | include/linux/fs.h | 1 | ||||
| -rw-r--r-- | net/sunrpc/rpc_pipe.c | 6 | ||||
| -rw-r--r-- | security/selinux/selinuxfs.c | 17 |
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; |
