ovl: move cache and version to ovl_inode
authorMiklos Szeredi <mszeredi@redhat.com>
Tue, 4 Jul 2017 20:03:16 +0000 (22:03 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Tue, 4 Jul 2017 20:03:16 +0000 (22:03 +0200)
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/ovl_entry.h
fs/overlayfs/super.c
fs/overlayfs/util.c

index d8f514a474ca081899e108383e3e992dde091d0c..6a90a48c358970637bf74bb3519dbf9386445ff7 100644 (file)
@@ -35,12 +35,8 @@ struct ovl_fs {
 
 /* private information held for every overlayfs dentry */
 struct ovl_entry {
-       struct ovl_dir_cache *cache;
        union {
-               struct {
-                       u64 version;
-                       bool opaque;
-               };
+               bool opaque;
                struct rcu_head rcu;
        };
        unsigned numlower;
@@ -50,7 +46,9 @@ struct ovl_entry {
 struct ovl_entry *ovl_alloc_entry(unsigned int numlower);
 
 struct ovl_inode {
+       struct ovl_dir_cache *cache;
        const char *redirect;
+       u64 version;
        unsigned long flags;
        struct inode vfs_inode;
        struct dentry *__upperdentry;
index b0d539af1fadc5a308e327fa3b805002b075e1f5..e0a51ea773eca3361509cc727c0e2c1332876d48 100644 (file)
@@ -169,7 +169,9 @@ static struct inode *ovl_alloc_inode(struct super_block *sb)
 {
        struct ovl_inode *oi = kmem_cache_alloc(ovl_inode_cachep, GFP_KERNEL);
 
+       oi->cache = NULL;
        oi->redirect = NULL;
+       oi->version = 0;
        oi->flags = 0;
        oi->__upperdentry = NULL;
        oi->lower = NULL;
index a0baaa7e224c22e1fa0c05de06085123056e0d1b..f093fcf2b4bd78872d80e4f53b9d54f00d62d0ec 100644 (file)
@@ -160,16 +160,12 @@ struct inode *ovl_inode_real(struct inode *inode)
 
 struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry)
 {
-       struct ovl_entry *oe = dentry->d_fsdata;
-
-       return oe->cache;
+       return OVL_I(d_inode(dentry))->cache;
 }
 
 void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache)
 {
-       struct ovl_entry *oe = dentry->d_fsdata;
-
-       oe->cache = cache;
+       OVL_I(d_inode(dentry))->cache = cache;
 }
 
 bool ovl_dentry_is_opaque(struct dentry *dentry)
@@ -242,18 +238,18 @@ void ovl_inode_update(struct inode *inode, struct dentry *upperdentry)
 
 void ovl_dentry_version_inc(struct dentry *dentry)
 {
-       struct ovl_entry *oe = dentry->d_fsdata;
+       struct inode *inode = d_inode(dentry);
 
-       WARN_ON(!inode_is_locked(dentry->d_inode));
-       oe->version++;
+       WARN_ON(!inode_is_locked(inode));
+       OVL_I(inode)->version++;
 }
 
 u64 ovl_dentry_version_get(struct dentry *dentry)
 {
-       struct ovl_entry *oe = dentry->d_fsdata;
+       struct inode *inode = d_inode(dentry);
 
-       WARN_ON(!inode_is_locked(dentry->d_inode));
-       return oe->version;
+       WARN_ON(!inode_is_locked(inode));
+       return OVL_I(inode)->version;
 }
 
 bool ovl_is_whiteout(struct dentry *dentry)