Merge tag 'fs.idmapped.v5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/braune...
[linux-2.6-microblaze.git] / fs / btrfs / btrfs_inode.h
index c652e19..76ee145 100644 (file)
@@ -51,6 +51,13 @@ enum {
         * the file range, inode's io_tree).
         */
        BTRFS_INODE_NO_DELALLOC_FLUSH,
+       /*
+        * Set when we are working on enabling verity for a file. Computing and
+        * writing the whole Merkle tree can take a while so we want to prevent
+        * races where two separate tasks attempt to simultaneously start verity
+        * on the same file.
+        */
+       BTRFS_INODE_VERITY_IN_PROGRESS,
 };
 
 /* in memory btrfs inode */
@@ -189,8 +196,10 @@ struct btrfs_inode {
         */
        u64 csum_bytes;
 
-       /* flags field from the on disk inode */
+       /* Backwards incompatible flags, lower half of inode_item::flags  */
        u32 flags;
+       /* Read-only compatibility flags, upper half of inode_item::flags */
+       u32 ro_flags;
 
        /*
         * Counters to keep track of the number of extent item's we may use due
@@ -348,6 +357,22 @@ struct btrfs_dio_private {
        u8 csums[];
 };
 
+/*
+ * btrfs_inode_item stores flags in a u64, btrfs_inode stores them in two
+ * separate u32s. These two functions convert between the two representations.
+ */
+static inline u64 btrfs_inode_combine_flags(u32 flags, u32 ro_flags)
+{
+       return (flags | ((u64)ro_flags << 32));
+}
+
+static inline void btrfs_inode_split_flags(u64 inode_item_flags,
+                                          u32 *flags, u32 *ro_flags)
+{
+       *flags = (u32)inode_item_flags;
+       *ro_flags = (u32)(inode_item_flags >> 32);
+}
+
 /* Array of bytes with variable length, hexadecimal format 0x1234 */
 #define CSUM_FMT                               "0x%*phN"
 #define CSUM_FMT_VALUE(size, bytes)            size, bytes