/* 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;
 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;
 
 
 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)
 
 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)