Merge tag 'pinctrl-v3.19-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[cascardo/linux.git] / include / linux / f2fs_fs.h
index 860313a..87f14e9 100644 (file)
@@ -33,7 +33,8 @@
 #define F2FS_META_INO(sbi)     (sbi->meta_ino_num)
 
 /* This flag is used by node and meta inodes, and by recovery */
-#define GFP_F2FS_ZERO  (GFP_NOFS | __GFP_ZERO)
+#define GFP_F2FS_ZERO          (GFP_NOFS | __GFP_ZERO)
+#define GFP_F2FS_HIGH_ZERO     (GFP_NOFS | __GFP_ZERO | __GFP_HIGHMEM)
 
 /*
  * For further optimization on multi-head logs, on-disk layout supports maximum
@@ -170,14 +171,12 @@ struct f2fs_extent {
 
 #define F2FS_INLINE_XATTR      0x01    /* file inline xattr flag */
 #define F2FS_INLINE_DATA       0x02    /* file inline data flag */
+#define F2FS_INLINE_DENTRY     0x04    /* file inline dentry flag */
+#define F2FS_DATA_EXIST                0x08    /* file inline data exist flag */
 
 #define MAX_INLINE_DATA                (sizeof(__le32) * (DEF_ADDRS_PER_INODE - \
                                                F2FS_INLINE_XATTR_ADDRS - 1))
 
-#define INLINE_DATA_OFFSET     (PAGE_CACHE_SIZE - sizeof(struct node_footer) -\
-                               sizeof(__le32) * (DEF_ADDRS_PER_INODE + \
-                               DEF_NIDS_PER_INODE - 1))
-
 struct f2fs_inode {
        __le16 i_mode;                  /* file mode */
        __u8 i_advise;                  /* file hints */
@@ -435,6 +434,24 @@ struct f2fs_dentry_block {
        __u8 filename[NR_DENTRY_IN_BLOCK][F2FS_SLOT_LEN];
 } __packed;
 
+/* for inline dir */
+#define NR_INLINE_DENTRY       (MAX_INLINE_DATA * BITS_PER_BYTE / \
+                               ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
+                               BITS_PER_BYTE + 1))
+#define INLINE_DENTRY_BITMAP_SIZE      ((NR_INLINE_DENTRY + \
+                                       BITS_PER_BYTE - 1) / BITS_PER_BYTE)
+#define INLINE_RESERVED_SIZE   (MAX_INLINE_DATA - \
+                               ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
+                               NR_INLINE_DENTRY + INLINE_DENTRY_BITMAP_SIZE))
+
+/* inline directory entry structure */
+struct f2fs_inline_dentry {
+       __u8 dentry_bitmap[INLINE_DENTRY_BITMAP_SIZE];
+       __u8 reserved[INLINE_RESERVED_SIZE];
+       struct f2fs_dir_entry dentry[NR_INLINE_DENTRY];
+       __u8 filename[NR_INLINE_DENTRY][F2FS_SLOT_LEN];
+} __packed;
+
 /* file types used in inode_info->flags */
 enum {
        F2FS_FT_UNKNOWN,