aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/ext4.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/ext4.h')
-rw-r--r--fs/ext4/ext4.h55
1 files changed, 52 insertions, 3 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index fa44df87971..e717dfd2f2b 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -526,6 +526,7 @@ struct ext4_new_group_data {
526#define EXT4_FREE_BLOCKS_METADATA 0x0001 526#define EXT4_FREE_BLOCKS_METADATA 0x0001
527#define EXT4_FREE_BLOCKS_FORGET 0x0002 527#define EXT4_FREE_BLOCKS_FORGET 0x0002
528#define EXT4_FREE_BLOCKS_VALIDATED 0x0004 528#define EXT4_FREE_BLOCKS_VALIDATED 0x0004
529#define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008
529 530
530/* 531/*
531 * ioctl commands 532 * ioctl commands
@@ -939,6 +940,8 @@ struct ext4_inode_info {
939#define ext4_find_next_zero_bit find_next_zero_bit_le 940#define ext4_find_next_zero_bit find_next_zero_bit_le
940#define ext4_find_next_bit find_next_bit_le 941#define ext4_find_next_bit find_next_bit_le
941 942
943extern void ext4_set_bits(void *bm, int cur, int len);
944
942/* 945/*
943 * Maximal mount counts between two filesystem checks 946 * Maximal mount counts between two filesystem checks
944 */ 947 */
@@ -1126,7 +1129,8 @@ struct ext4_sb_info {
1126 struct journal_s *s_journal; 1129 struct journal_s *s_journal;
1127 struct list_head s_orphan; 1130 struct list_head s_orphan;
1128 struct mutex s_orphan_lock; 1131 struct mutex s_orphan_lock;
1129 struct mutex s_resize_lock; 1132 unsigned long s_resize_flags; /* Flags indicating if there
1133 is a resizer */
1130 unsigned long s_commit_interval; 1134 unsigned long s_commit_interval;
1131 u32 s_max_batch_time; 1135 u32 s_max_batch_time;
1132 u32 s_min_batch_time; 1136 u32 s_min_batch_time;
@@ -1214,6 +1218,9 @@ struct ext4_sb_info {
1214 1218
1215 /* Kernel thread for multiple mount protection */ 1219 /* Kernel thread for multiple mount protection */
1216 struct task_struct *s_mmp_tsk; 1220 struct task_struct *s_mmp_tsk;
1221
1222 /* record the last minlen when FITRIM is called. */
1223 atomic_t s_last_trim_minblks;
1217}; 1224};
1218 1225
1219static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb) 1226static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
@@ -1743,6 +1750,7 @@ extern unsigned ext4_init_block_bitmap(struct super_block *sb,
1743 struct ext4_group_desc *desc); 1750 struct ext4_group_desc *desc);
1744#define ext4_free_blocks_after_init(sb, group, desc) \ 1751#define ext4_free_blocks_after_init(sb, group, desc) \
1745 ext4_init_block_bitmap(sb, NULL, group, desc) 1752 ext4_init_block_bitmap(sb, NULL, group, desc)
1753ext4_fsblk_t ext4_inode_to_goal_block(struct inode *);
1746 1754
1747/* dir.c */ 1755/* dir.c */
1748extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *, 1756extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *,
@@ -1793,7 +1801,7 @@ extern void ext4_free_blocks(handle_t *handle, struct inode *inode,
1793 unsigned long count, int flags); 1801 unsigned long count, int flags);
1794extern int ext4_mb_add_groupinfo(struct super_block *sb, 1802extern int ext4_mb_add_groupinfo(struct super_block *sb,
1795 ext4_group_t i, struct ext4_group_desc *desc); 1803 ext4_group_t i, struct ext4_group_desc *desc);
1796extern void ext4_add_groupblocks(handle_t *handle, struct super_block *sb, 1804extern int ext4_group_add_blocks(handle_t *handle, struct super_block *sb,
1797 ext4_fsblk_t block, unsigned long count); 1805 ext4_fsblk_t block, unsigned long count);
1798extern int ext4_trim_fs(struct super_block *, struct fstrim_range *); 1806extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
1799 1807
@@ -1834,6 +1842,17 @@ extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);
1834extern qsize_t *ext4_get_reserved_space(struct inode *inode); 1842extern qsize_t *ext4_get_reserved_space(struct inode *inode);
1835extern void ext4_da_update_reserve_space(struct inode *inode, 1843extern void ext4_da_update_reserve_space(struct inode *inode,
1836 int used, int quota_claim); 1844 int used, int quota_claim);
1845
1846/* indirect.c */
1847extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
1848 struct ext4_map_blocks *map, int flags);
1849extern ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb,
1850 const struct iovec *iov, loff_t offset,
1851 unsigned long nr_segs);
1852extern int ext4_ind_calc_metadata_amount(struct inode *inode, sector_t lblock);
1853extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks, int chunk);
1854extern void ext4_ind_truncate(struct inode *inode);
1855
1837/* ioctl.c */ 1856/* ioctl.c */
1838extern long ext4_ioctl(struct file *, unsigned int, unsigned long); 1857extern long ext4_ioctl(struct file *, unsigned int, unsigned long);
1839extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long); 1858extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long);
@@ -1855,6 +1874,9 @@ extern int ext4_group_extend(struct super_block *sb,
1855 ext4_fsblk_t n_blocks_count); 1874 ext4_fsblk_t n_blocks_count);
1856 1875
1857/* super.c */ 1876/* super.c */
1877extern void *ext4_kvmalloc(size_t size, gfp_t flags);
1878extern void *ext4_kvzalloc(size_t size, gfp_t flags);
1879extern void ext4_kvfree(void *ptr);
1858extern void __ext4_error(struct super_block *, const char *, unsigned int, 1880extern void __ext4_error(struct super_block *, const char *, unsigned int,
1859 const char *, ...) 1881 const char *, ...)
1860 __attribute__ ((format (printf, 4, 5))); 1882 __attribute__ ((format (printf, 4, 5)));
@@ -2067,11 +2089,19 @@ struct ext4_group_info {
2067 * 5 free 8-block regions. */ 2089 * 5 free 8-block regions. */
2068}; 2090};
2069 2091
2070#define EXT4_GROUP_INFO_NEED_INIT_BIT 0 2092#define EXT4_GROUP_INFO_NEED_INIT_BIT 0
2093#define EXT4_GROUP_INFO_WAS_TRIMMED_BIT 1
2071 2094
2072#define EXT4_MB_GRP_NEED_INIT(grp) \ 2095#define EXT4_MB_GRP_NEED_INIT(grp) \
2073 (test_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &((grp)->bb_state))) 2096 (test_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &((grp)->bb_state)))
2074 2097
2098#define EXT4_MB_GRP_WAS_TRIMMED(grp) \
2099 (test_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
2100#define EXT4_MB_GRP_SET_TRIMMED(grp) \
2101 (set_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
2102#define EXT4_MB_GRP_CLEAR_TRIMMED(grp) \
2103 (clear_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
2104
2075#define EXT4_MAX_CONTENTION 8 2105#define EXT4_MAX_CONTENTION 8
2076#define EXT4_CONTENTION_THRESHOLD 2 2106#define EXT4_CONTENTION_THRESHOLD 2
2077 2107
@@ -2123,6 +2153,19 @@ static inline void ext4_mark_super_dirty(struct super_block *sb)
2123} 2153}
2124 2154
2125/* 2155/*
2156 * Block validity checking
2157 */
2158#define ext4_check_indirect_blockref(inode, bh) \
2159 ext4_check_blockref(__func__, __LINE__, inode, \
2160 (__le32 *)(bh)->b_data, \
2161 EXT4_ADDR_PER_BLOCK((inode)->i_sb))
2162
2163#define ext4_ind_check_inode(inode) \
2164 ext4_check_blockref(__func__, __LINE__, inode, \
2165 EXT4_I(inode)->i_data, \
2166 EXT4_NDIR_BLOCKS)
2167
2168/*
2126 * Inodes and files operations 2169 * Inodes and files operations
2127 */ 2170 */
2128 2171
@@ -2151,6 +2194,8 @@ extern void ext4_exit_system_zone(void);
2151extern int ext4_data_block_valid(struct ext4_sb_info *sbi, 2194extern int ext4_data_block_valid(struct ext4_sb_info *sbi,
2152 ext4_fsblk_t start_blk, 2195 ext4_fsblk_t start_blk,
2153 unsigned int count); 2196 unsigned int count);
2197extern int ext4_check_blockref(const char *, unsigned int,
2198 struct inode *, __le32 *, unsigned int);
2154 2199
2155/* extents.c */ 2200/* extents.c */
2156extern int ext4_ext_tree_init(handle_t *handle, struct inode *); 2201extern int ext4_ext_tree_init(handle_t *handle, struct inode *);
@@ -2230,6 +2275,10 @@ static inline void set_bitmap_uptodate(struct buffer_head *bh)
2230extern wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ]; 2275extern wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
2231extern struct mutex ext4__aio_mutex[EXT4_WQ_HASH_SZ]; 2276extern struct mutex ext4__aio_mutex[EXT4_WQ_HASH_SZ];
2232 2277
2278#define EXT4_RESIZING 0
2279extern int ext4_resize_begin(struct super_block *sb);
2280extern void ext4_resize_end(struct super_block *sb);
2281
2233#endif /* __KERNEL__ */ 2282#endif /* __KERNEL__ */
2234 2283
2235#endif /* _EXT4_H */ 2284#endif /* _EXT4_H */