f2fs: export dir operations for inline dir
[deliverable/linux.git] / fs / f2fs / f2fs.h
index 8171e80b2ee9f9709c953b4264ea92bee01011c6..97d90ed1d67bf9ef48a45b659cbbdaec6d8229e4 100644 (file)
@@ -46,8 +46,9 @@
 #define F2FS_MOUNT_DISABLE_EXT_IDENTIFY        0x00000040
 #define F2FS_MOUNT_INLINE_XATTR                0x00000080
 #define F2FS_MOUNT_INLINE_DATA         0x00000100
-#define F2FS_MOUNT_FLUSH_MERGE         0x00000200
-#define F2FS_MOUNT_NOBARRIER           0x00000400
+#define F2FS_MOUNT_INLINE_DENTRY       0x00000200
+#define F2FS_MOUNT_FLUSH_MERGE         0x00000400
+#define F2FS_MOUNT_NOBARRIER           0x00000800
 
 #define clear_opt(sbi, option) (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option)
 #define set_opt(sbi, option)   (sbi->mount_opt.opt |= F2FS_MOUNT_##option)
@@ -269,6 +270,7 @@ struct f2fs_inode_info {
        struct extent_info ext;         /* in-memory extent cache entry */
        struct dir_inode_entry *dirty_dir;      /* the pointer of dirty dir */
 
+       struct radix_tree_root inmem_root;      /* radix tree for inmem pages */
        struct list_head inmem_pages;   /* inmemory pages managed by f2fs */
        struct mutex inmem_lock;        /* lock for inmemory pages */
 };
@@ -1057,6 +1059,7 @@ enum {
        FI_NO_EXTENT,           /* not to use the extent cache */
        FI_INLINE_XATTR,        /* used for inline xattr */
        FI_INLINE_DATA,         /* used for inline data*/
+       FI_INLINE_DENTRY,       /* used for inline dentry */
        FI_APPEND_WRITE,        /* inode has appended data */
        FI_UPDATE_WRITE,        /* inode has in-place-update data */
        FI_NEED_IPU,            /* used for ipu per file */
@@ -1103,6 +1106,8 @@ static inline void get_inline_info(struct f2fs_inode_info *fi,
                set_inode_flag(fi, FI_INLINE_XATTR);
        if (ri->i_inline & F2FS_INLINE_DATA)
                set_inode_flag(fi, FI_INLINE_DATA);
+       if (ri->i_inline & F2FS_INLINE_DENTRY)
+               set_inode_flag(fi, FI_INLINE_DENTRY);
 }
 
 static inline void set_raw_inline(struct f2fs_inode_info *fi,
@@ -1114,6 +1119,8 @@ static inline void set_raw_inline(struct f2fs_inode_info *fi,
                ri->i_inline |= F2FS_INLINE_XATTR;
        if (is_inode_flag_set(fi, FI_INLINE_DATA))
                ri->i_inline |= F2FS_INLINE_DATA;
+       if (is_inode_flag_set(fi, FI_INLINE_DENTRY))
+               ri->i_inline |= F2FS_INLINE_DENTRY;
 }
 
 static inline int f2fs_has_inline_xattr(struct inode *inode)
@@ -1164,6 +1171,17 @@ static inline void *inline_data_addr(struct page *page)
        return (void *)&(ri->i_addr[1]);
 }
 
+static inline int f2fs_has_inline_dentry(struct inode *inode)
+{
+       return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DENTRY);
+}
+
+static inline void *inline_dentry_addr(struct page *page)
+{
+       struct f2fs_inode *ri = F2FS_INODE(page);
+       return (void *)&(ri->i_addr[1]);
+}
+
 static inline int f2fs_readonly(struct super_block *sb)
 {
        return sb->s_flags & MS_RDONLY;
@@ -1224,6 +1242,13 @@ struct dentry *f2fs_get_parent(struct dentry *child);
 /*
  * dir.c
  */
+extern unsigned char f2fs_filetype_table[F2FS_FT_MAX];
+bool early_match_name(size_t, f2fs_hash_t, struct f2fs_dir_entry *);
+void set_de_type(struct f2fs_dir_entry *, struct inode *);
+struct page *init_inode_metadata(struct inode *, struct inode *,
+                                                       const struct qstr *);
+void update_parent_metadata(struct inode *, struct inode *, unsigned int);
+void f2fs_drop_nlink(struct inode *, struct inode *, struct page *);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *, struct qstr *,
                                                        struct page **);
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *, struct page **);
@@ -1232,7 +1257,8 @@ void f2fs_set_link(struct inode *, struct f2fs_dir_entry *,
                                struct page *, struct inode *);
 int update_dent_inode(struct inode *, const struct qstr *);
 int __f2fs_add_link(struct inode *, const struct qstr *, struct inode *);
-void f2fs_delete_entry(struct f2fs_dir_entry *, struct page *, struct inode *);
+void f2fs_delete_entry(struct f2fs_dir_entry *, struct page *, struct inode *,
+                                                       struct inode *);
 int f2fs_do_tmpfile(struct inode *, struct inode *);
 int f2fs_make_empty(struct inode *, struct inode *);
 bool f2fs_empty_dir(struct inode *);
@@ -1296,6 +1322,7 @@ void destroy_node_manager_caches(void);
  * segment.c
  */
 void register_inmem_page(struct inode *, struct page *);
+void invalidate_inmem_page(struct inode *, struct page *);
 void commit_inmem_pages(struct inode *, bool);
 void f2fs_balance_fs(struct f2fs_sb_info *);
 void f2fs_balance_fs_bg(struct f2fs_sb_info *);
This page took 0.027866 seconds and 5 git commands to generate.