aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2010-12-18 10:22:30 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2011-01-12 20:02:34 -0500
commitc8aebb0c9f8c7471643d5f8ba68328de8013005f (patch)
treefae492892b9eecaf9c42632dd1203102cc69365a
parent4162cf64973df51fc885825bc9ca4d055891c49f (diff)
per-superblock default ->d_op
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/dcache.c4
-rw-r--r--include/linux/fs.h1
2 files changed, 5 insertions, 0 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index 5699d4c027cb..5ec58267b5bb 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1320,6 +1320,7 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
1320 __dget_dlock(parent); 1320 __dget_dlock(parent);
1321 dentry->d_parent = parent; 1321 dentry->d_parent = parent;
1322 dentry->d_sb = parent->d_sb; 1322 dentry->d_sb = parent->d_sb;
1323 d_set_d_op(dentry, dentry->d_sb->s_d_op);
1323 list_add(&dentry->d_u.d_child, &parent->d_subdirs); 1324 list_add(&dentry->d_u.d_child, &parent->d_subdirs);
1324 spin_unlock(&parent->d_lock); 1325 spin_unlock(&parent->d_lock);
1325 } 1326 }
@@ -1335,6 +1336,7 @@ struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name)
1335 struct dentry *dentry = d_alloc(NULL, name); 1336 struct dentry *dentry = d_alloc(NULL, name);
1336 if (dentry) { 1337 if (dentry) {
1337 dentry->d_sb = sb; 1338 dentry->d_sb = sb;
1339 d_set_d_op(dentry, dentry->d_sb->s_d_op);
1338 dentry->d_parent = dentry; 1340 dentry->d_parent = dentry;
1339 dentry->d_flags |= DCACHE_DISCONNECTED; 1341 dentry->d_flags |= DCACHE_DISCONNECTED;
1340 } 1342 }
@@ -1507,6 +1509,7 @@ struct dentry * d_alloc_root(struct inode * root_inode)
1507 res = d_alloc(NULL, &name); 1509 res = d_alloc(NULL, &name);
1508 if (res) { 1510 if (res) {
1509 res->d_sb = root_inode->i_sb; 1511 res->d_sb = root_inode->i_sb;
1512 d_set_d_op(res, res->d_sb->s_d_op);
1510 res->d_parent = res; 1513 res->d_parent = res;
1511 d_instantiate(res, root_inode); 1514 d_instantiate(res, root_inode);
1512 } 1515 }
@@ -1567,6 +1570,7 @@ struct dentry *d_obtain_alias(struct inode *inode)
1567 /* attach a disconnected dentry */ 1570 /* attach a disconnected dentry */
1568 spin_lock(&tmp->d_lock); 1571 spin_lock(&tmp->d_lock);
1569 tmp->d_sb = inode->i_sb; 1572 tmp->d_sb = inode->i_sb;
1573 d_set_d_op(tmp, tmp->d_sb->s_d_op);
1570 tmp->d_inode = inode; 1574 tmp->d_inode = inode;
1571 tmp->d_flags |= DCACHE_DISCONNECTED; 1575 tmp->d_flags |= DCACHE_DISCONNECTED;
1572 list_add(&tmp->d_alias, &inode->i_dentry); 1576 list_add(&tmp->d_alias, &inode->i_dentry);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f84d9928bdb1..3e4c27486e74 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1423,6 +1423,7 @@ struct super_block {
1423 * generic_show_options() 1423 * generic_show_options()
1424 */ 1424 */
1425 char __rcu *s_options; 1425 char __rcu *s_options;
1426 const struct dentry_operations *s_d_op; /* default d_op for dentries */
1426}; 1427};
1427 1428
1428extern struct timespec current_fs_time(struct super_block *sb); 1429extern struct timespec current_fs_time(struct super_block *sb);