diff options
author | Miklos Szeredi <mszeredi@redhat.com> | 2016-10-18 09:36:48 -0400 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2016-10-18 09:36:48 -0400 |
commit | 0ce267ff95a0302cf6fb2a552833abbfb7861a43 (patch) | |
tree | e5f7a786185e44b43f492ff75f00243cb3310490 /fs | |
parent | 1001354ca34179f3db924eb66672442a173147dc (diff) |
fuse: fix root dentry initialization
Add missing dentry initialization to root dentry.
Fixes: f75fdf22b0a8 ("fuse: don't use ->d_time")
Reported-by: Andreas Reis <andreas.reis@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fuse/dir.c | 5 | ||||
-rw-r--r-- | fs/fuse/fuse_i.h | 1 | ||||
-rw-r--r-- | fs/fuse/inode.c | 3 |
3 files changed, 8 insertions, 1 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 6a4d0e5418a1..b3ebe512d64c 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
@@ -286,6 +286,11 @@ const struct dentry_operations fuse_dentry_operations = { | |||
286 | .d_release = fuse_dentry_release, | 286 | .d_release = fuse_dentry_release, |
287 | }; | 287 | }; |
288 | 288 | ||
289 | const struct dentry_operations fuse_root_dentry_operations = { | ||
290 | .d_init = fuse_dentry_init, | ||
291 | .d_release = fuse_dentry_release, | ||
292 | }; | ||
293 | |||
289 | int fuse_valid_type(int m) | 294 | int fuse_valid_type(int m) |
290 | { | 295 | { |
291 | return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) || | 296 | return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) || |
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 0dfbb136e59a..91307940c8ac 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h | |||
@@ -692,6 +692,7 @@ static inline u64 get_node_id(struct inode *inode) | |||
692 | extern const struct file_operations fuse_dev_operations; | 692 | extern const struct file_operations fuse_dev_operations; |
693 | 693 | ||
694 | extern const struct dentry_operations fuse_dentry_operations; | 694 | extern const struct dentry_operations fuse_dentry_operations; |
695 | extern const struct dentry_operations fuse_root_dentry_operations; | ||
695 | 696 | ||
696 | /** | 697 | /** |
697 | * Inode to nodeid comparison. | 698 | * Inode to nodeid comparison. |
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 17141099f2e7..6fe6a88ecb4a 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -1131,10 +1131,11 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent) | |||
1131 | 1131 | ||
1132 | err = -ENOMEM; | 1132 | err = -ENOMEM; |
1133 | root = fuse_get_root_inode(sb, d.rootmode); | 1133 | root = fuse_get_root_inode(sb, d.rootmode); |
1134 | sb->s_d_op = &fuse_root_dentry_operations; | ||
1134 | root_dentry = d_make_root(root); | 1135 | root_dentry = d_make_root(root); |
1135 | if (!root_dentry) | 1136 | if (!root_dentry) |
1136 | goto err_dev_free; | 1137 | goto err_dev_free; |
1137 | /* only now - we want root dentry with NULL ->d_op */ | 1138 | /* Root dentry doesn't have .d_revalidate */ |
1138 | sb->s_d_op = &fuse_dentry_operations; | 1139 | sb->s_d_op = &fuse_dentry_operations; |
1139 | 1140 | ||
1140 | init_req = fuse_request_alloc(0); | 1141 | init_req = fuse_request_alloc(0); |