diff options
-rw-r--r-- | fs/anon_inodes.c | 2 | ||||
-rw-r--r-- | fs/dcache.c | 12 | ||||
-rw-r--r-- | fs/pipe.c | 2 | ||||
-rw-r--r-- | include/linux/dcache.h | 1 | ||||
-rw-r--r-- | net/socket.c | 2 |
5 files changed, 16 insertions, 3 deletions
diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c index aca8806fa206..9d92b33da8a0 100644 --- a/fs/anon_inodes.c +++ b/fs/anon_inodes.c | |||
@@ -102,7 +102,7 @@ struct file *anon_inode_getfile(const char *name, | |||
102 | this.name = name; | 102 | this.name = name; |
103 | this.len = strlen(name); | 103 | this.len = strlen(name); |
104 | this.hash = 0; | 104 | this.hash = 0; |
105 | path.dentry = d_alloc(anon_inode_mnt->mnt_sb->s_root, &this); | 105 | path.dentry = d_alloc_pseudo(anon_inode_mnt->mnt_sb, &this); |
106 | if (!path.dentry) | 106 | if (!path.dentry) |
107 | goto err_module; | 107 | goto err_module; |
108 | 108 | ||
diff --git a/fs/dcache.c b/fs/dcache.c index 09ec945f3c98..9e6e6db76869 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -1330,6 +1330,18 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) | |||
1330 | } | 1330 | } |
1331 | EXPORT_SYMBOL(d_alloc); | 1331 | EXPORT_SYMBOL(d_alloc); |
1332 | 1332 | ||
1333 | struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name) | ||
1334 | { | ||
1335 | struct dentry *dentry = d_alloc(NULL, name); | ||
1336 | if (dentry) { | ||
1337 | dentry->d_sb = sb; | ||
1338 | dentry->d_parent = dentry; | ||
1339 | dentry->d_flags |= DCACHE_DISCONNECTED; | ||
1340 | } | ||
1341 | return dentry; | ||
1342 | } | ||
1343 | EXPORT_SYMBOL(d_alloc_pseudo); | ||
1344 | |||
1333 | struct dentry *d_alloc_name(struct dentry *parent, const char *name) | 1345 | struct dentry *d_alloc_name(struct dentry *parent, const char *name) |
1334 | { | 1346 | { |
1335 | struct qstr q; | 1347 | struct qstr q; |
@@ -999,7 +999,7 @@ struct file *create_write_pipe(int flags) | |||
999 | goto err; | 999 | goto err; |
1000 | 1000 | ||
1001 | err = -ENOMEM; | 1001 | err = -ENOMEM; |
1002 | path.dentry = d_alloc(pipe_mnt->mnt_sb->s_root, &name); | 1002 | path.dentry = d_alloc_pseudo(pipe_mnt->mnt_sb, &name); |
1003 | if (!path.dentry) | 1003 | if (!path.dentry) |
1004 | goto err_inode; | 1004 | goto err_inode; |
1005 | path.mnt = mntget(pipe_mnt); | 1005 | path.mnt = mntget(pipe_mnt); |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index d719e4de8046..c0a2ca97c72f 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -211,6 +211,7 @@ extern void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op | |||
211 | 211 | ||
212 | /* allocate/de-allocate */ | 212 | /* allocate/de-allocate */ |
213 | extern struct dentry * d_alloc(struct dentry *, const struct qstr *); | 213 | extern struct dentry * d_alloc(struct dentry *, const struct qstr *); |
214 | extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *); | ||
214 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); | 215 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); |
215 | extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *); | 216 | extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *); |
216 | extern struct dentry * d_obtain_alias(struct inode *); | 217 | extern struct dentry * d_obtain_alias(struct inode *); |
diff --git a/net/socket.c b/net/socket.c index 991e266bc7ae..0ee74c325320 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -361,7 +361,7 @@ static int sock_alloc_file(struct socket *sock, struct file **f, int flags) | |||
361 | if (unlikely(fd < 0)) | 361 | if (unlikely(fd < 0)) |
362 | return fd; | 362 | return fd; |
363 | 363 | ||
364 | path.dentry = d_alloc(sock_mnt->mnt_sb->s_root, &name); | 364 | path.dentry = d_alloc_pseudo(sock_mnt->mnt_sb, &name); |
365 | if (unlikely(!path.dentry)) { | 365 | if (unlikely(!path.dentry)) { |
366 | put_unused_fd(fd); | 366 | put_unused_fd(fd); |
367 | return -ENOMEM; | 367 | return -ENOMEM; |