diff options
Diffstat (limited to 'fs/ext4/ext4.h')
-rw-r--r-- | fs/ext4/ext4.h | 141 |
1 files changed, 102 insertions, 39 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index cec3145e532c..5b0e26a1272d 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -144,9 +144,17 @@ struct ext4_allocation_request { | |||
144 | #define EXT4_MAP_UNWRITTEN (1 << BH_Unwritten) | 144 | #define EXT4_MAP_UNWRITTEN (1 << BH_Unwritten) |
145 | #define EXT4_MAP_BOUNDARY (1 << BH_Boundary) | 145 | #define EXT4_MAP_BOUNDARY (1 << BH_Boundary) |
146 | #define EXT4_MAP_UNINIT (1 << BH_Uninit) | 146 | #define EXT4_MAP_UNINIT (1 << BH_Uninit) |
147 | /* Sometimes (in the bigalloc case, from ext4_da_get_block_prep) the caller of | ||
148 | * ext4_map_blocks wants to know whether or not the underlying cluster has | ||
149 | * already been accounted for. EXT4_MAP_FROM_CLUSTER conveys to the caller that | ||
150 | * the requested mapping was from previously mapped (or delayed allocated) | ||
151 | * cluster. We use BH_AllocFromCluster only for this flag. BH_AllocFromCluster | ||
152 | * should never appear on buffer_head's state flags. | ||
153 | */ | ||
154 | #define EXT4_MAP_FROM_CLUSTER (1 << BH_AllocFromCluster) | ||
147 | #define EXT4_MAP_FLAGS (EXT4_MAP_NEW | EXT4_MAP_MAPPED |\ | 155 | #define EXT4_MAP_FLAGS (EXT4_MAP_NEW | EXT4_MAP_MAPPED |\ |
148 | EXT4_MAP_UNWRITTEN | EXT4_MAP_BOUNDARY |\ | 156 | EXT4_MAP_UNWRITTEN | EXT4_MAP_BOUNDARY |\ |
149 | EXT4_MAP_UNINIT) | 157 | EXT4_MAP_UNINIT | EXT4_MAP_FROM_CLUSTER) |
150 | 158 | ||
151 | struct ext4_map_blocks { | 159 | struct ext4_map_blocks { |
152 | ext4_fsblk_t m_pblk; | 160 | ext4_fsblk_t m_pblk; |
@@ -239,8 +247,11 @@ struct ext4_io_submit { | |||
239 | # define EXT4_BLOCK_SIZE(s) (EXT4_MIN_BLOCK_SIZE << (s)->s_log_block_size) | 247 | # define EXT4_BLOCK_SIZE(s) (EXT4_MIN_BLOCK_SIZE << (s)->s_log_block_size) |
240 | #endif | 248 | #endif |
241 | #define EXT4_ADDR_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / sizeof(__u32)) | 249 | #define EXT4_ADDR_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / sizeof(__u32)) |
250 | #define EXT4_CLUSTER_SIZE(s) (EXT4_BLOCK_SIZE(s) << \ | ||
251 | EXT4_SB(s)->s_cluster_bits) | ||
242 | #ifdef __KERNEL__ | 252 | #ifdef __KERNEL__ |
243 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits) | 253 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits) |
254 | # define EXT4_CLUSTER_BITS(s) (EXT4_SB(s)->s_cluster_bits) | ||
244 | #else | 255 | #else |
245 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) | 256 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) |
246 | #endif | 257 | #endif |
@@ -258,6 +269,14 @@ struct ext4_io_submit { | |||
258 | #endif | 269 | #endif |
259 | #define EXT4_BLOCK_ALIGN(size, blkbits) ALIGN((size), (1 << (blkbits))) | 270 | #define EXT4_BLOCK_ALIGN(size, blkbits) ALIGN((size), (1 << (blkbits))) |
260 | 271 | ||
272 | /* Translate a block number to a cluster number */ | ||
273 | #define EXT4_B2C(sbi, blk) ((blk) >> (sbi)->s_cluster_bits) | ||
274 | /* Translate a cluster number to a block number */ | ||
275 | #define EXT4_C2B(sbi, cluster) ((cluster) << (sbi)->s_cluster_bits) | ||
276 | /* Translate # of blks to # of clusters */ | ||
277 | #define EXT4_NUM_B2C(sbi, blks) (((blks) + (sbi)->s_cluster_ratio - 1) >> \ | ||
278 | (sbi)->s_cluster_bits) | ||
279 | |||
261 | /* | 280 | /* |
262 | * Structure of a blocks group descriptor | 281 | * Structure of a blocks group descriptor |
263 | */ | 282 | */ |
@@ -289,7 +308,7 @@ struct ext4_group_desc | |||
289 | 308 | ||
290 | struct flex_groups { | 309 | struct flex_groups { |
291 | atomic_t free_inodes; | 310 | atomic_t free_inodes; |
292 | atomic_t free_blocks; | 311 | atomic_t free_clusters; |
293 | atomic_t used_dirs; | 312 | atomic_t used_dirs; |
294 | }; | 313 | }; |
295 | 314 | ||
@@ -306,6 +325,7 @@ struct flex_groups { | |||
306 | #define EXT4_DESC_SIZE(s) (EXT4_SB(s)->s_desc_size) | 325 | #define EXT4_DESC_SIZE(s) (EXT4_SB(s)->s_desc_size) |
307 | #ifdef __KERNEL__ | 326 | #ifdef __KERNEL__ |
308 | # define EXT4_BLOCKS_PER_GROUP(s) (EXT4_SB(s)->s_blocks_per_group) | 327 | # define EXT4_BLOCKS_PER_GROUP(s) (EXT4_SB(s)->s_blocks_per_group) |
328 | # define EXT4_CLUSTERS_PER_GROUP(s) (EXT4_SB(s)->s_clusters_per_group) | ||
309 | # define EXT4_DESC_PER_BLOCK(s) (EXT4_SB(s)->s_desc_per_block) | 329 | # define EXT4_DESC_PER_BLOCK(s) (EXT4_SB(s)->s_desc_per_block) |
310 | # define EXT4_INODES_PER_GROUP(s) (EXT4_SB(s)->s_inodes_per_group) | 330 | # define EXT4_INODES_PER_GROUP(s) (EXT4_SB(s)->s_inodes_per_group) |
311 | # define EXT4_DESC_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_desc_per_block_bits) | 331 | # define EXT4_DESC_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_desc_per_block_bits) |
@@ -358,8 +378,7 @@ struct flex_groups { | |||
358 | 378 | ||
359 | /* Flags that should be inherited by new inodes from their parent. */ | 379 | /* Flags that should be inherited by new inodes from their parent. */ |
360 | #define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\ | 380 | #define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\ |
361 | EXT4_SYNC_FL | EXT4_IMMUTABLE_FL | EXT4_APPEND_FL |\ | 381 | EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\ |
362 | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\ | ||
363 | EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\ | 382 | EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\ |
364 | EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL) | 383 | EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL) |
365 | 384 | ||
@@ -520,6 +539,8 @@ struct ext4_new_group_data { | |||
520 | #define EXT4_GET_BLOCKS_PUNCH_OUT_EXT 0x0020 | 539 | #define EXT4_GET_BLOCKS_PUNCH_OUT_EXT 0x0020 |
521 | /* Don't normalize allocation size (used for fallocate) */ | 540 | /* Don't normalize allocation size (used for fallocate) */ |
522 | #define EXT4_GET_BLOCKS_NO_NORMALIZE 0x0040 | 541 | #define EXT4_GET_BLOCKS_NO_NORMALIZE 0x0040 |
542 | /* Request will not result in inode size update (user for fallocate) */ | ||
543 | #define EXT4_GET_BLOCKS_KEEP_SIZE 0x0080 | ||
523 | 544 | ||
524 | /* | 545 | /* |
525 | * Flags used by ext4_free_blocks | 546 | * Flags used by ext4_free_blocks |
@@ -528,6 +549,13 @@ struct ext4_new_group_data { | |||
528 | #define EXT4_FREE_BLOCKS_FORGET 0x0002 | 549 | #define EXT4_FREE_BLOCKS_FORGET 0x0002 |
529 | #define EXT4_FREE_BLOCKS_VALIDATED 0x0004 | 550 | #define EXT4_FREE_BLOCKS_VALIDATED 0x0004 |
530 | #define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008 | 551 | #define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008 |
552 | #define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER 0x0010 | ||
553 | #define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER 0x0020 | ||
554 | |||
555 | /* | ||
556 | * Flags used by ext4_discard_partial_page_buffers | ||
557 | */ | ||
558 | #define EXT4_DISCARD_PARTIAL_PG_ZERO_UNMAPPED 0x0001 | ||
531 | 559 | ||
532 | /* | 560 | /* |
533 | * ioctl commands | 561 | * ioctl commands |
@@ -538,9 +566,6 @@ struct ext4_new_group_data { | |||
538 | #define EXT4_IOC_SETVERSION _IOW('f', 4, long) | 566 | #define EXT4_IOC_SETVERSION _IOW('f', 4, long) |
539 | #define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION | 567 | #define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION |
540 | #define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION | 568 | #define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION |
541 | #ifdef CONFIG_JBD2_DEBUG | ||
542 | #define EXT4_IOC_WAIT_FOR_READONLY _IOR('f', 99, long) | ||
543 | #endif | ||
544 | #define EXT4_IOC_GETRSVSZ _IOR('f', 5, long) | 569 | #define EXT4_IOC_GETRSVSZ _IOR('f', 5, long) |
545 | #define EXT4_IOC_SETRSVSZ _IOW('f', 6, long) | 570 | #define EXT4_IOC_SETRSVSZ _IOW('f', 6, long) |
546 | #define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) | 571 | #define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) |
@@ -563,9 +588,6 @@ struct ext4_new_group_data { | |||
563 | #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) | 588 | #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) |
564 | #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) | 589 | #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) |
565 | #define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input) | 590 | #define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input) |
566 | #ifdef CONFIG_JBD2_DEBUG | ||
567 | #define EXT4_IOC32_WAIT_FOR_READONLY _IOR('f', 99, int) | ||
568 | #endif | ||
569 | #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION | 591 | #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION |
570 | #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION | 592 | #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION |
571 | #endif | 593 | #endif |
@@ -837,6 +859,7 @@ struct ext4_inode_info { | |||
837 | ext4_group_t i_last_alloc_group; | 859 | ext4_group_t i_last_alloc_group; |
838 | 860 | ||
839 | /* allocation reservation info for delalloc */ | 861 | /* allocation reservation info for delalloc */ |
862 | /* In case of bigalloc, these refer to clusters rather than blocks */ | ||
840 | unsigned int i_reserved_data_blocks; | 863 | unsigned int i_reserved_data_blocks; |
841 | unsigned int i_reserved_meta_blocks; | 864 | unsigned int i_reserved_meta_blocks; |
842 | unsigned int i_allocated_meta_blocks; | 865 | unsigned int i_allocated_meta_blocks; |
@@ -886,7 +909,6 @@ struct ext4_inode_info { | |||
886 | /* | 909 | /* |
887 | * Mount flags | 910 | * Mount flags |
888 | */ | 911 | */ |
889 | #define EXT4_MOUNT_OLDALLOC 0x00002 /* Don't use the new Orlov allocator */ | ||
890 | #define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */ | 912 | #define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */ |
891 | #define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */ | 913 | #define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */ |
892 | #define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */ | 914 | #define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */ |
@@ -918,6 +940,9 @@ struct ext4_inode_info { | |||
918 | #define EXT4_MOUNT_DISCARD 0x40000000 /* Issue DISCARD requests */ | 940 | #define EXT4_MOUNT_DISCARD 0x40000000 /* Issue DISCARD requests */ |
919 | #define EXT4_MOUNT_INIT_INODE_TABLE 0x80000000 /* Initialize uninitialized itables */ | 941 | #define EXT4_MOUNT_INIT_INODE_TABLE 0x80000000 /* Initialize uninitialized itables */ |
920 | 942 | ||
943 | #define EXT4_MOUNT2_EXPLICIT_DELALLOC 0x00000001 /* User explicitly | ||
944 | specified delalloc */ | ||
945 | |||
921 | #define clear_opt(sb, opt) EXT4_SB(sb)->s_mount_opt &= \ | 946 | #define clear_opt(sb, opt) EXT4_SB(sb)->s_mount_opt &= \ |
922 | ~EXT4_MOUNT_##opt | 947 | ~EXT4_MOUNT_##opt |
923 | #define set_opt(sb, opt) EXT4_SB(sb)->s_mount_opt |= \ | 948 | #define set_opt(sb, opt) EXT4_SB(sb)->s_mount_opt |= \ |
@@ -968,9 +993,9 @@ struct ext4_super_block { | |||
968 | /*10*/ __le32 s_free_inodes_count; /* Free inodes count */ | 993 | /*10*/ __le32 s_free_inodes_count; /* Free inodes count */ |
969 | __le32 s_first_data_block; /* First Data Block */ | 994 | __le32 s_first_data_block; /* First Data Block */ |
970 | __le32 s_log_block_size; /* Block size */ | 995 | __le32 s_log_block_size; /* Block size */ |
971 | __le32 s_obso_log_frag_size; /* Obsoleted fragment size */ | 996 | __le32 s_log_cluster_size; /* Allocation cluster size */ |
972 | /*20*/ __le32 s_blocks_per_group; /* # Blocks per group */ | 997 | /*20*/ __le32 s_blocks_per_group; /* # Blocks per group */ |
973 | __le32 s_obso_frags_per_group; /* Obsoleted fragments per group */ | 998 | __le32 s_clusters_per_group; /* # Clusters per group */ |
974 | __le32 s_inodes_per_group; /* # Inodes per group */ | 999 | __le32 s_inodes_per_group; /* # Inodes per group */ |
975 | __le32 s_mtime; /* Mount time */ | 1000 | __le32 s_mtime; /* Mount time */ |
976 | /*30*/ __le32 s_wtime; /* Write time */ | 1001 | /*30*/ __le32 s_wtime; /* Write time */ |
@@ -1066,7 +1091,10 @@ struct ext4_super_block { | |||
1066 | __u8 s_last_error_func[32]; /* function where the error happened */ | 1091 | __u8 s_last_error_func[32]; /* function where the error happened */ |
1067 | #define EXT4_S_ERR_END offsetof(struct ext4_super_block, s_mount_opts) | 1092 | #define EXT4_S_ERR_END offsetof(struct ext4_super_block, s_mount_opts) |
1068 | __u8 s_mount_opts[64]; | 1093 | __u8 s_mount_opts[64]; |
1069 | __le32 s_reserved[112]; /* Padding to the end of the block */ | 1094 | __le32 s_usr_quota_inum; /* inode for tracking user quota */ |
1095 | __le32 s_grp_quota_inum; /* inode for tracking group quota */ | ||
1096 | __le32 s_overhead_clusters; /* overhead blocks/clusters in fs */ | ||
1097 | __le32 s_reserved[109]; /* Padding to the end of the block */ | ||
1070 | }; | 1098 | }; |
1071 | 1099 | ||
1072 | #define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START) | 1100 | #define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START) |
@@ -1086,6 +1114,7 @@ struct ext4_sb_info { | |||
1086 | unsigned long s_desc_size; /* Size of a group descriptor in bytes */ | 1114 | unsigned long s_desc_size; /* Size of a group descriptor in bytes */ |
1087 | unsigned long s_inodes_per_block;/* Number of inodes per block */ | 1115 | unsigned long s_inodes_per_block;/* Number of inodes per block */ |
1088 | unsigned long s_blocks_per_group;/* Number of blocks in a group */ | 1116 | unsigned long s_blocks_per_group;/* Number of blocks in a group */ |
1117 | unsigned long s_clusters_per_group; /* Number of clusters in a group */ | ||
1089 | unsigned long s_inodes_per_group;/* Number of inodes in a group */ | 1118 | unsigned long s_inodes_per_group;/* Number of inodes in a group */ |
1090 | unsigned long s_itb_per_group; /* Number of inode table blocks per group */ | 1119 | unsigned long s_itb_per_group; /* Number of inode table blocks per group */ |
1091 | unsigned long s_gdb_count; /* Number of group descriptor blocks */ | 1120 | unsigned long s_gdb_count; /* Number of group descriptor blocks */ |
@@ -1094,6 +1123,8 @@ struct ext4_sb_info { | |||
1094 | ext4_group_t s_blockfile_groups;/* Groups acceptable for non-extent files */ | 1123 | ext4_group_t s_blockfile_groups;/* Groups acceptable for non-extent files */ |
1095 | unsigned long s_overhead_last; /* Last calculated overhead */ | 1124 | unsigned long s_overhead_last; /* Last calculated overhead */ |
1096 | unsigned long s_blocks_last; /* Last seen block count */ | 1125 | unsigned long s_blocks_last; /* Last seen block count */ |
1126 | unsigned int s_cluster_ratio; /* Number of blocks per cluster */ | ||
1127 | unsigned int s_cluster_bits; /* log2 of s_cluster_ratio */ | ||
1097 | loff_t s_bitmap_maxbytes; /* max bytes for bitmap files */ | 1128 | loff_t s_bitmap_maxbytes; /* max bytes for bitmap files */ |
1098 | struct buffer_head * s_sbh; /* Buffer containing the super block */ | 1129 | struct buffer_head * s_sbh; /* Buffer containing the super block */ |
1099 | struct ext4_super_block *s_es; /* Pointer to the super block in the buffer */ | 1130 | struct ext4_super_block *s_es; /* Pointer to the super block in the buffer */ |
@@ -1117,10 +1148,10 @@ struct ext4_sb_info { | |||
1117 | u32 s_hash_seed[4]; | 1148 | u32 s_hash_seed[4]; |
1118 | int s_def_hash_version; | 1149 | int s_def_hash_version; |
1119 | int s_hash_unsigned; /* 3 if hash should be signed, 0 if not */ | 1150 | int s_hash_unsigned; /* 3 if hash should be signed, 0 if not */ |
1120 | struct percpu_counter s_freeblocks_counter; | 1151 | struct percpu_counter s_freeclusters_counter; |
1121 | struct percpu_counter s_freeinodes_counter; | 1152 | struct percpu_counter s_freeinodes_counter; |
1122 | struct percpu_counter s_dirs_counter; | 1153 | struct percpu_counter s_dirs_counter; |
1123 | struct percpu_counter s_dirtyblocks_counter; | 1154 | struct percpu_counter s_dirtyclusters_counter; |
1124 | struct blockgroup_lock *s_blockgroup_lock; | 1155 | struct blockgroup_lock *s_blockgroup_lock; |
1125 | struct proc_dir_entry *s_proc; | 1156 | struct proc_dir_entry *s_proc; |
1126 | struct kobject s_kobj; | 1157 | struct kobject s_kobj; |
@@ -1136,10 +1167,6 @@ struct ext4_sb_info { | |||
1136 | u32 s_max_batch_time; | 1167 | u32 s_max_batch_time; |
1137 | u32 s_min_batch_time; | 1168 | u32 s_min_batch_time; |
1138 | struct block_device *journal_bdev; | 1169 | struct block_device *journal_bdev; |
1139 | #ifdef CONFIG_JBD2_DEBUG | ||
1140 | struct timer_list turn_ro_timer; /* For turning read-only (crash simulation) */ | ||
1141 | wait_queue_head_t ro_wait_queue; /* For people waiting for the fs to go read-only */ | ||
1142 | #endif | ||
1143 | #ifdef CONFIG_QUOTA | 1170 | #ifdef CONFIG_QUOTA |
1144 | char *s_qf_names[MAXQUOTAS]; /* Names of quota files with journalled quota */ | 1171 | char *s_qf_names[MAXQUOTAS]; /* Names of quota files with journalled quota */ |
1145 | int s_jquota_fmt; /* Format of quota to use */ | 1172 | int s_jquota_fmt; /* Format of quota to use */ |
@@ -1248,6 +1275,15 @@ static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino) | |||
1248 | ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)); | 1275 | ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)); |
1249 | } | 1276 | } |
1250 | 1277 | ||
1278 | static inline void ext4_set_io_unwritten_flag(struct inode *inode, | ||
1279 | struct ext4_io_end *io_end) | ||
1280 | { | ||
1281 | if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) { | ||
1282 | io_end->flag |= EXT4_IO_END_UNWRITTEN; | ||
1283 | atomic_inc(&EXT4_I(inode)->i_aiodio_unwritten); | ||
1284 | } | ||
1285 | } | ||
1286 | |||
1251 | /* | 1287 | /* |
1252 | * Inode dynamic state flags | 1288 | * Inode dynamic state flags |
1253 | */ | 1289 | */ |
@@ -1360,6 +1396,7 @@ static inline void ext4_clear_state_flags(struct ext4_inode_info *ei) | |||
1360 | #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 | 1396 | #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 |
1361 | #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 | 1397 | #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 |
1362 | #define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100 | 1398 | #define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100 |
1399 | #define EXT4_FEATURE_RO_COMPAT_BIGALLOC 0x0200 | ||
1363 | 1400 | ||
1364 | #define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001 | 1401 | #define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001 |
1365 | #define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002 | 1402 | #define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002 |
@@ -1402,7 +1439,8 @@ static inline void ext4_clear_state_flags(struct ext4_inode_info *ei) | |||
1402 | EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \ | 1439 | EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \ |
1403 | EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \ | 1440 | EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \ |
1404 | EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\ | 1441 | EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\ |
1405 | EXT4_FEATURE_RO_COMPAT_HUGE_FILE) | 1442 | EXT4_FEATURE_RO_COMPAT_HUGE_FILE |\ |
1443 | EXT4_FEATURE_RO_COMPAT_BIGALLOC) | ||
1406 | 1444 | ||
1407 | /* | 1445 | /* |
1408 | * Default values for user and/or group using reserved blocks | 1446 | * Default values for user and/or group using reserved blocks |
@@ -1735,9 +1773,9 @@ extern ext4_fsblk_t ext4_new_meta_blocks(handle_t *handle, struct inode *inode, | |||
1735 | unsigned int flags, | 1773 | unsigned int flags, |
1736 | unsigned long *count, | 1774 | unsigned long *count, |
1737 | int *errp); | 1775 | int *errp); |
1738 | extern int ext4_claim_free_blocks(struct ext4_sb_info *sbi, | 1776 | extern int ext4_claim_free_clusters(struct ext4_sb_info *sbi, |
1739 | s64 nblocks, unsigned int flags); | 1777 | s64 nclusters, unsigned int flags); |
1740 | extern ext4_fsblk_t ext4_count_free_blocks(struct super_block *); | 1778 | extern ext4_fsblk_t ext4_count_free_clusters(struct super_block *); |
1741 | extern void ext4_check_blocks_bitmap(struct super_block *); | 1779 | extern void ext4_check_blocks_bitmap(struct super_block *); |
1742 | extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb, | 1780 | extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb, |
1743 | ext4_group_t block_group, | 1781 | ext4_group_t block_group, |
@@ -1745,12 +1783,18 @@ extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb, | |||
1745 | extern int ext4_should_retry_alloc(struct super_block *sb, int *retries); | 1783 | extern int ext4_should_retry_alloc(struct super_block *sb, int *retries); |
1746 | struct buffer_head *ext4_read_block_bitmap(struct super_block *sb, | 1784 | struct buffer_head *ext4_read_block_bitmap(struct super_block *sb, |
1747 | ext4_group_t block_group); | 1785 | ext4_group_t block_group); |
1748 | extern unsigned ext4_init_block_bitmap(struct super_block *sb, | 1786 | extern void ext4_init_block_bitmap(struct super_block *sb, |
1749 | struct buffer_head *bh, | 1787 | struct buffer_head *bh, |
1750 | ext4_group_t group, | 1788 | ext4_group_t group, |
1751 | struct ext4_group_desc *desc); | 1789 | struct ext4_group_desc *desc); |
1752 | #define ext4_free_blocks_after_init(sb, group, desc) \ | 1790 | extern unsigned ext4_free_clusters_after_init(struct super_block *sb, |
1753 | ext4_init_block_bitmap(sb, NULL, group, desc) | 1791 | ext4_group_t block_group, |
1792 | struct ext4_group_desc *gdp); | ||
1793 | extern unsigned ext4_num_base_meta_clusters(struct super_block *sb, | ||
1794 | ext4_group_t block_group); | ||
1795 | extern unsigned ext4_num_overhead_clusters(struct super_block *sb, | ||
1796 | ext4_group_t block_group, | ||
1797 | struct ext4_group_desc *gdp); | ||
1754 | ext4_fsblk_t ext4_inode_to_goal_block(struct inode *); | 1798 | ext4_fsblk_t ext4_inode_to_goal_block(struct inode *); |
1755 | 1799 | ||
1756 | /* dir.c */ | 1800 | /* dir.c */ |
@@ -1776,7 +1820,8 @@ extern int ext4fs_dirhash(const char *name, int len, struct | |||
1776 | 1820 | ||
1777 | /* ialloc.c */ | 1821 | /* ialloc.c */ |
1778 | extern struct inode *ext4_new_inode(handle_t *, struct inode *, int, | 1822 | extern struct inode *ext4_new_inode(handle_t *, struct inode *, int, |
1779 | const struct qstr *qstr, __u32 goal); | 1823 | const struct qstr *qstr, __u32 goal, |
1824 | uid_t *owner); | ||
1780 | extern void ext4_free_inode(handle_t *, struct inode *); | 1825 | extern void ext4_free_inode(handle_t *, struct inode *); |
1781 | extern struct inode * ext4_orphan_get(struct super_block *, unsigned long); | 1826 | extern struct inode * ext4_orphan_get(struct super_block *, unsigned long); |
1782 | extern unsigned long ext4_count_free_inodes(struct super_block *); | 1827 | extern unsigned long ext4_count_free_inodes(struct super_block *); |
@@ -1839,6 +1884,12 @@ extern int ext4_block_truncate_page(handle_t *handle, | |||
1839 | struct address_space *mapping, loff_t from); | 1884 | struct address_space *mapping, loff_t from); |
1840 | extern int ext4_block_zero_page_range(handle_t *handle, | 1885 | extern int ext4_block_zero_page_range(handle_t *handle, |
1841 | struct address_space *mapping, loff_t from, loff_t length); | 1886 | struct address_space *mapping, loff_t from, loff_t length); |
1887 | extern int ext4_discard_partial_page_buffers(handle_t *handle, | ||
1888 | struct address_space *mapping, loff_t from, | ||
1889 | loff_t length, int flags); | ||
1890 | extern int ext4_discard_partial_page_buffers_no_lock(handle_t *handle, | ||
1891 | struct inode *inode, struct page *page, loff_t from, | ||
1892 | loff_t length, int flags); | ||
1842 | extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); | 1893 | extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); |
1843 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); | 1894 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); |
1844 | extern void ext4_da_update_reserve_space(struct inode *inode, | 1895 | extern void ext4_da_update_reserve_space(struct inode *inode, |
@@ -1927,8 +1978,8 @@ extern ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, | |||
1927 | struct ext4_group_desc *bg); | 1978 | struct ext4_group_desc *bg); |
1928 | extern ext4_fsblk_t ext4_inode_table(struct super_block *sb, | 1979 | extern ext4_fsblk_t ext4_inode_table(struct super_block *sb, |
1929 | struct ext4_group_desc *bg); | 1980 | struct ext4_group_desc *bg); |
1930 | extern __u32 ext4_free_blks_count(struct super_block *sb, | 1981 | extern __u32 ext4_free_group_clusters(struct super_block *sb, |
1931 | struct ext4_group_desc *bg); | 1982 | struct ext4_group_desc *bg); |
1932 | extern __u32 ext4_free_inodes_count(struct super_block *sb, | 1983 | extern __u32 ext4_free_inodes_count(struct super_block *sb, |
1933 | struct ext4_group_desc *bg); | 1984 | struct ext4_group_desc *bg); |
1934 | extern __u32 ext4_used_dirs_count(struct super_block *sb, | 1985 | extern __u32 ext4_used_dirs_count(struct super_block *sb, |
@@ -1941,8 +1992,9 @@ extern void ext4_inode_bitmap_set(struct super_block *sb, | |||
1941 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | 1992 | struct ext4_group_desc *bg, ext4_fsblk_t blk); |
1942 | extern void ext4_inode_table_set(struct super_block *sb, | 1993 | extern void ext4_inode_table_set(struct super_block *sb, |
1943 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | 1994 | struct ext4_group_desc *bg, ext4_fsblk_t blk); |
1944 | extern void ext4_free_blks_set(struct super_block *sb, | 1995 | extern void ext4_free_group_clusters_set(struct super_block *sb, |
1945 | struct ext4_group_desc *bg, __u32 count); | 1996 | struct ext4_group_desc *bg, |
1997 | __u32 count); | ||
1946 | extern void ext4_free_inodes_set(struct super_block *sb, | 1998 | extern void ext4_free_inodes_set(struct super_block *sb, |
1947 | struct ext4_group_desc *bg, __u32 count); | 1999 | struct ext4_group_desc *bg, __u32 count); |
1948 | extern void ext4_used_dirs_set(struct super_block *sb, | 2000 | extern void ext4_used_dirs_set(struct super_block *sb, |
@@ -2051,13 +2103,13 @@ do { \ | |||
2051 | } while (0) | 2103 | } while (0) |
2052 | 2104 | ||
2053 | #ifdef CONFIG_SMP | 2105 | #ifdef CONFIG_SMP |
2054 | /* Each CPU can accumulate percpu_counter_batch blocks in their local | 2106 | /* Each CPU can accumulate percpu_counter_batch clusters in their local |
2055 | * counters. So we need to make sure we have free blocks more | 2107 | * counters. So we need to make sure we have free clusters more |
2056 | * than percpu_counter_batch * nr_cpu_ids. Also add a window of 4 times. | 2108 | * than percpu_counter_batch * nr_cpu_ids. Also add a window of 4 times. |
2057 | */ | 2109 | */ |
2058 | #define EXT4_FREEBLOCKS_WATERMARK (4 * (percpu_counter_batch * nr_cpu_ids)) | 2110 | #define EXT4_FREECLUSTERS_WATERMARK (4 * (percpu_counter_batch * nr_cpu_ids)) |
2059 | #else | 2111 | #else |
2060 | #define EXT4_FREEBLOCKS_WATERMARK 0 | 2112 | #define EXT4_FREECLUSTERS_WATERMARK 0 |
2061 | #endif | 2113 | #endif |
2062 | 2114 | ||
2063 | static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize) | 2115 | static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize) |
@@ -2243,10 +2295,19 @@ extern int ext4_multi_mount_protect(struct super_block *, ext4_fsblk_t); | |||
2243 | enum ext4_state_bits { | 2295 | enum ext4_state_bits { |
2244 | BH_Uninit /* blocks are allocated but uninitialized on disk */ | 2296 | BH_Uninit /* blocks are allocated but uninitialized on disk */ |
2245 | = BH_JBDPrivateStart, | 2297 | = BH_JBDPrivateStart, |
2298 | BH_AllocFromCluster, /* allocated blocks were part of already | ||
2299 | * allocated cluster. Note that this flag will | ||
2300 | * never, ever appear in a buffer_head's state | ||
2301 | * flag. See EXT4_MAP_FROM_CLUSTER to see where | ||
2302 | * this is used. */ | ||
2303 | BH_Da_Mapped, /* Delayed allocated block that now has a mapping. This | ||
2304 | * flag is set when ext4_map_blocks is called on a | ||
2305 | * delayed allocated block to get its real mapping. */ | ||
2246 | }; | 2306 | }; |
2247 | 2307 | ||
2248 | BUFFER_FNS(Uninit, uninit) | 2308 | BUFFER_FNS(Uninit, uninit) |
2249 | TAS_BUFFER_FNS(Uninit, uninit) | 2309 | TAS_BUFFER_FNS(Uninit, uninit) |
2310 | BUFFER_FNS(Da_Mapped, da_mapped) | ||
2250 | 2311 | ||
2251 | /* | 2312 | /* |
2252 | * Add new method to test wether block and inode bitmaps are properly | 2313 | * Add new method to test wether block and inode bitmaps are properly |
@@ -2282,4 +2343,6 @@ extern void ext4_resize_end(struct super_block *sb); | |||
2282 | 2343 | ||
2283 | #endif /* __KERNEL__ */ | 2344 | #endif /* __KERNEL__ */ |
2284 | 2345 | ||
2346 | #include "ext4_extents.h" | ||
2347 | |||
2285 | #endif /* _EXT4_H */ | 2348 | #endif /* _EXT4_H */ |