diff options
Diffstat (limited to 'fs/ext4/ext4.h')
-rw-r--r-- | fs/ext4/ext4.h | 55 |
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 | ||
943 | extern 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 | ||
1219 | static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb) | 1226 | static 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) |
1753 | ext4_fsblk_t ext4_inode_to_goal_block(struct inode *); | ||
1746 | 1754 | ||
1747 | /* dir.c */ | 1755 | /* dir.c */ |
1748 | extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *, | 1756 | extern 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); |
1794 | extern int ext4_mb_add_groupinfo(struct super_block *sb, | 1802 | extern 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); |
1796 | extern void ext4_add_groupblocks(handle_t *handle, struct super_block *sb, | 1804 | extern 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); |
1798 | extern int ext4_trim_fs(struct super_block *, struct fstrim_range *); | 1806 | extern 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); | |||
1834 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); | 1842 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); |
1835 | extern void ext4_da_update_reserve_space(struct inode *inode, | 1843 | extern 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 */ | ||
1847 | extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, | ||
1848 | struct ext4_map_blocks *map, int flags); | ||
1849 | extern ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, | ||
1850 | const struct iovec *iov, loff_t offset, | ||
1851 | unsigned long nr_segs); | ||
1852 | extern int ext4_ind_calc_metadata_amount(struct inode *inode, sector_t lblock); | ||
1853 | extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks, int chunk); | ||
1854 | extern void ext4_ind_truncate(struct inode *inode); | ||
1855 | |||
1837 | /* ioctl.c */ | 1856 | /* ioctl.c */ |
1838 | extern long ext4_ioctl(struct file *, unsigned int, unsigned long); | 1857 | extern long ext4_ioctl(struct file *, unsigned int, unsigned long); |
1839 | extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long); | 1858 | extern 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 */ |
1877 | extern void *ext4_kvmalloc(size_t size, gfp_t flags); | ||
1878 | extern void *ext4_kvzalloc(size_t size, gfp_t flags); | ||
1879 | extern void ext4_kvfree(void *ptr); | ||
1858 | extern void __ext4_error(struct super_block *, const char *, unsigned int, | 1880 | extern 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); | |||
2151 | extern int ext4_data_block_valid(struct ext4_sb_info *sbi, | 2194 | extern 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); |
2197 | extern int ext4_check_blockref(const char *, unsigned int, | ||
2198 | struct inode *, __le32 *, unsigned int); | ||
2154 | 2199 | ||
2155 | /* extents.c */ | 2200 | /* extents.c */ |
2156 | extern int ext4_ext_tree_init(handle_t *handle, struct inode *); | 2201 | extern int ext4_ext_tree_init(handle_t *handle, struct inode *); |
@@ -2230,6 +2275,10 @@ static inline void set_bitmap_uptodate(struct buffer_head *bh) | |||
2230 | extern wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ]; | 2275 | extern wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ]; |
2231 | extern struct mutex ext4__aio_mutex[EXT4_WQ_HASH_SZ]; | 2276 | extern struct mutex ext4__aio_mutex[EXT4_WQ_HASH_SZ]; |
2232 | 2277 | ||
2278 | #define EXT4_RESIZING 0 | ||
2279 | extern int ext4_resize_begin(struct super_block *sb); | ||
2280 | extern 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 */ |