Commit c8aebb0c authored by Al Viro's avatar Al Viro

per-superblock default ->d_op

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 4162cf64
...@@ -1320,6 +1320,7 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) ...@@ -1320,6 +1320,7 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
__dget_dlock(parent); __dget_dlock(parent);
dentry->d_parent = parent; dentry->d_parent = parent;
dentry->d_sb = parent->d_sb; dentry->d_sb = parent->d_sb;
d_set_d_op(dentry, dentry->d_sb->s_d_op);
list_add(&dentry->d_u.d_child, &parent->d_subdirs); list_add(&dentry->d_u.d_child, &parent->d_subdirs);
spin_unlock(&parent->d_lock); spin_unlock(&parent->d_lock);
} }
...@@ -1335,6 +1336,7 @@ struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name) ...@@ -1335,6 +1336,7 @@ struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name)
struct dentry *dentry = d_alloc(NULL, name); struct dentry *dentry = d_alloc(NULL, name);
if (dentry) { if (dentry) {
dentry->d_sb = sb; dentry->d_sb = sb;
d_set_d_op(dentry, dentry->d_sb->s_d_op);
dentry->d_parent = dentry; dentry->d_parent = dentry;
dentry->d_flags |= DCACHE_DISCONNECTED; dentry->d_flags |= DCACHE_DISCONNECTED;
} }
...@@ -1507,6 +1509,7 @@ struct dentry * d_alloc_root(struct inode * root_inode) ...@@ -1507,6 +1509,7 @@ struct dentry * d_alloc_root(struct inode * root_inode)
res = d_alloc(NULL, &name); res = d_alloc(NULL, &name);
if (res) { if (res) {
res->d_sb = root_inode->i_sb; res->d_sb = root_inode->i_sb;
d_set_d_op(res, res->d_sb->s_d_op);
res->d_parent = res; res->d_parent = res;
d_instantiate(res, root_inode); d_instantiate(res, root_inode);
} }
...@@ -1567,6 +1570,7 @@ struct dentry *d_obtain_alias(struct inode *inode) ...@@ -1567,6 +1570,7 @@ struct dentry *d_obtain_alias(struct inode *inode)
/* attach a disconnected dentry */ /* attach a disconnected dentry */
spin_lock(&tmp->d_lock); spin_lock(&tmp->d_lock);
tmp->d_sb = inode->i_sb; tmp->d_sb = inode->i_sb;
d_set_d_op(tmp, tmp->d_sb->s_d_op);
tmp->d_inode = inode; tmp->d_inode = inode;
tmp->d_flags |= DCACHE_DISCONNECTED; tmp->d_flags |= DCACHE_DISCONNECTED;
list_add(&tmp->d_alias, &inode->i_dentry); list_add(&tmp->d_alias, &inode->i_dentry);
......
...@@ -1423,6 +1423,7 @@ struct super_block { ...@@ -1423,6 +1423,7 @@ struct super_block {
* generic_show_options() * generic_show_options()
*/ */
char __rcu *s_options; char __rcu *s_options;
const struct dentry_operations *s_d_op; /* default d_op for dentries */
}; };
extern struct timespec current_fs_time(struct super_block *sb); extern struct timespec current_fs_time(struct super_block *sb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment