]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/overlayfs/ovl_entry.h
ext4: fix race between writepages and enabling EXT4_EXTENTS_FL
[linux.git] / fs / overlayfs / ovl_entry.h
index 28348c44ea5b2a808277598bc6206168955d4c50..89015ea822e7e91d2e5d9d129158a32a8f82e48a 100644 (file)
@@ -24,6 +24,8 @@ struct ovl_sb {
        dev_t pseudo_dev;
        /* Unusable (conflicting) uuid */
        bool bad_uuid;
+       /* Used as a lower layer (but maybe also as upper) */
+       bool is_lower;
 };
 
 struct ovl_layer {
@@ -38,18 +40,18 @@ struct ovl_layer {
 };
 
 struct ovl_path {
-       struct ovl_layer *layer;
+       const struct ovl_layer *layer;
        struct dentry *dentry;
 };
 
 /* private information held for overlayfs's superblock */
 struct ovl_fs {
        struct vfsmount *upper_mnt;
-       unsigned int numlower;
-       /* Number of unique lower sb that differ from upper sb */
-       unsigned int numlowerfs;
-       struct ovl_layer *lower_layers;
-       struct ovl_sb *lower_fs;
+       unsigned int numlayer;
+       /* Number of unique fs among layers including upper fs */
+       unsigned int numfs;
+       const struct ovl_layer *layers;
+       struct ovl_sb *fs;
        /* workbasedir is the path at workdir= mount option */
        struct dentry *workbasedir;
        /* workdir is the 'work' directory under workbasedir */
@@ -71,10 +73,15 @@ struct ovl_fs {
        struct inode *workbasedir_trap;
        struct inode *workdir_trap;
        struct inode *indexdir_trap;
-       /* Inode numbers in all layers do not use the high xino_bits */
-       unsigned int xino_bits;
+       /* -1: disabled, 0: same fs, 1..32: number of unused ino bits */
+       int xino_mode;
 };
 
+static inline struct ovl_fs *OVL_FS(struct super_block *sb)
+{
+       return (struct ovl_fs *)sb->s_fs_info;
+}
+
 /* private information held for every overlayfs dentry */
 struct ovl_entry {
        union {