mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
nilfs really shouldn't slap struct dentry on stack...
... especially when it only needs (and initializes) .d_name of it Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
89031bc797
commit
0319003d0d
@ -349,11 +349,11 @@ done:
|
||||
* Entry is guaranteed to be valid.
|
||||
*/
|
||||
struct nilfs_dir_entry *
|
||||
nilfs_find_entry(struct inode *dir, struct dentry *dentry,
|
||||
nilfs_find_entry(struct inode *dir, const struct qstr *qstr,
|
||||
struct page **res_page)
|
||||
{
|
||||
const char *name = dentry->d_name.name;
|
||||
int namelen = dentry->d_name.len;
|
||||
const unsigned char *name = qstr->name;
|
||||
int namelen = qstr->len;
|
||||
unsigned reclen = NILFS_DIR_REC_LEN(namelen);
|
||||
unsigned long start, n;
|
||||
unsigned long npages = dir_pages(dir);
|
||||
@ -424,13 +424,13 @@ struct nilfs_dir_entry *nilfs_dotdot(struct inode *dir, struct page **p)
|
||||
return de;
|
||||
}
|
||||
|
||||
ino_t nilfs_inode_by_name(struct inode *dir, struct dentry *dentry)
|
||||
ino_t nilfs_inode_by_name(struct inode *dir, const struct qstr *qstr)
|
||||
{
|
||||
ino_t res = 0;
|
||||
struct nilfs_dir_entry *de;
|
||||
struct page *page;
|
||||
|
||||
de = nilfs_find_entry(dir, dentry, &page);
|
||||
de = nilfs_find_entry(dir, qstr, &page);
|
||||
if (de) {
|
||||
res = le64_to_cpu(de->inode);
|
||||
kunmap(page);
|
||||
|
@ -67,7 +67,7 @@ nilfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
|
||||
if (dentry->d_name.len > NILFS_NAME_LEN)
|
||||
return ERR_PTR(-ENAMETOOLONG);
|
||||
|
||||
ino = nilfs_inode_by_name(dir, dentry);
|
||||
ino = nilfs_inode_by_name(dir, &dentry->d_name);
|
||||
inode = NULL;
|
||||
if (ino) {
|
||||
inode = nilfs_iget(dir->i_sb, ino);
|
||||
@ -81,10 +81,7 @@ struct dentry *nilfs_get_parent(struct dentry *child)
|
||||
{
|
||||
unsigned long ino;
|
||||
struct inode *inode;
|
||||
struct dentry dotdot;
|
||||
|
||||
dotdot.d_name.name = "..";
|
||||
dotdot.d_name.len = 2;
|
||||
struct qstr dotdot = {.name = "..", .len = 2};
|
||||
|
||||
ino = nilfs_inode_by_name(child->d_inode, &dotdot);
|
||||
if (!ino)
|
||||
@ -296,7 +293,7 @@ static int nilfs_do_unlink(struct inode *dir, struct dentry *dentry)
|
||||
int err;
|
||||
|
||||
err = -ENOENT;
|
||||
de = nilfs_find_entry(dir, dentry, &page);
|
||||
de = nilfs_find_entry(dir, &dentry->d_name, &page);
|
||||
if (!de)
|
||||
goto out;
|
||||
|
||||
@ -389,7 +386,7 @@ static int nilfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
return err;
|
||||
|
||||
err = -ENOENT;
|
||||
old_de = nilfs_find_entry(old_dir, old_dentry, &old_page);
|
||||
old_de = nilfs_find_entry(old_dir, &old_dentry->d_name, &old_page);
|
||||
if (!old_de)
|
||||
goto out;
|
||||
|
||||
@ -409,7 +406,7 @@ static int nilfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
goto out_dir;
|
||||
|
||||
err = -ENOENT;
|
||||
new_de = nilfs_find_entry(new_dir, new_dentry, &new_page);
|
||||
new_de = nilfs_find_entry(new_dir, &new_dentry->d_name, &new_page);
|
||||
if (!new_de)
|
||||
goto out_dir;
|
||||
inc_nlink(old_inode);
|
||||
|
@ -217,10 +217,10 @@ static inline int nilfs_init_acl(struct inode *inode, struct inode *dir)
|
||||
|
||||
/* dir.c */
|
||||
extern int nilfs_add_link(struct dentry *, struct inode *);
|
||||
extern ino_t nilfs_inode_by_name(struct inode *, struct dentry *);
|
||||
extern ino_t nilfs_inode_by_name(struct inode *, const struct qstr *);
|
||||
extern int nilfs_make_empty(struct inode *, struct inode *);
|
||||
extern struct nilfs_dir_entry *
|
||||
nilfs_find_entry(struct inode *, struct dentry *, struct page **);
|
||||
nilfs_find_entry(struct inode *, const struct qstr *, struct page **);
|
||||
extern int nilfs_delete_entry(struct nilfs_dir_entry *, struct page *);
|
||||
extern int nilfs_empty_dir(struct inode *);
|
||||
extern struct nilfs_dir_entry *nilfs_dotdot(struct inode *, struct page **);
|
||||
|
Loading…
Reference in New Issue
Block a user