f2fs: extent cache: support unaligned extent
[linux-2.6-microblaze.git] / fs / f2fs / f2fs.h
index d24fd50..e97b4d8 100644 (file)
@@ -580,6 +580,9 @@ struct extent_info {
        unsigned int fofs;              /* start offset in a file */
        unsigned int len;               /* length of the extent */
        u32 blk;                        /* start block address of the extent */
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+       unsigned int c_len;             /* physical extent length of compressed blocks */
+#endif
 };
 
 struct extent_node {
@@ -799,6 +802,9 @@ static inline void set_extent_info(struct extent_info *ei, unsigned int fofs,
        ei->fofs = fofs;
        ei->blk = blk;
        ei->len = len;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+       ei->c_len = 0;
+#endif
 }
 
 static inline bool __is_discard_mergeable(struct discard_info *back,
@@ -823,6 +829,12 @@ static inline bool __is_discard_front_mergeable(struct discard_info *cur,
 static inline bool __is_extent_mergeable(struct extent_info *back,
                                                struct extent_info *front)
 {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+       if (back->c_len && back->len != back->c_len)
+               return false;
+       if (front->c_len && front->len != front->c_len)
+               return false;
+#endif
        return (back->fofs + back->len == front->fofs &&
                        back->blk + back->len == front->blk);
 }
@@ -4068,12 +4080,16 @@ int f2fs_write_multi_pages(struct compress_ctx *cc,
                                                struct writeback_control *wbc,
                                                enum iostat_type io_type);
 int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index);
+void f2fs_update_extent_tree_range_compressed(struct inode *inode,
+                               pgoff_t fofs, block_t blkaddr, unsigned int llen,
+                               unsigned int c_len);
 int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
                                unsigned nr_pages, sector_t *last_block_in_bio,
                                bool is_readahead, bool for_write);
 struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc);
 void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed);
 void f2fs_put_page_dic(struct page *page);
+unsigned int f2fs_cluster_blocks_are_contiguous(struct dnode_of_data *dn);
 int f2fs_init_compress_ctx(struct compress_ctx *cc);
 void f2fs_destroy_compress_ctx(struct compress_ctx *cc, bool reuse);
 void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
@@ -4128,6 +4144,7 @@ static inline void f2fs_put_page_dic(struct page *page)
 {
        WARN_ON_ONCE(1);
 }
+static inline unsigned int f2fs_cluster_blocks_are_contiguous(struct dnode_of_data *dn) { return 0; }
 static inline int f2fs_init_compress_inode(struct f2fs_sb_info *sbi) { return 0; }
 static inline void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi) { }
 static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; }
@@ -4143,6 +4160,9 @@ static inline bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi,
 static inline void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi,
                                                        nid_t ino) { }
 #define inc_compr_inode_stat(inode)            do { } while (0)
+static inline void f2fs_update_extent_tree_range_compressed(struct inode *inode,
+                               pgoff_t fofs, block_t blkaddr, unsigned int llen,
+                               unsigned int c_len) { }
 #endif
 
 static inline void set_compress_context(struct inode *inode)