diff options
Diffstat (limited to 'fs/ubifs/ubifs.h')
-rw-r--r-- | fs/ubifs/ubifs.h | 86 |
1 files changed, 46 insertions, 40 deletions
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index 8c40ad3c6721..93d1412a06f0 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -389,9 +389,9 @@ struct ubifs_gced_idx_leb { | |||
389 | * The @ui_size is a "shadow" variable for @inode->i_size and UBIFS uses | 389 | * The @ui_size is a "shadow" variable for @inode->i_size and UBIFS uses |
390 | * @ui_size instead of @inode->i_size. The reason for this is that UBIFS cannot | 390 | * @ui_size instead of @inode->i_size. The reason for this is that UBIFS cannot |
391 | * make sure @inode->i_size is always changed under @ui_mutex, because it | 391 | * make sure @inode->i_size is always changed under @ui_mutex, because it |
392 | * cannot call 'truncate_setsize()' with @ui_mutex locked, because it would deadlock | 392 | * cannot call 'truncate_setsize()' with @ui_mutex locked, because it would |
393 | * with 'ubifs_writepage()' (see file.c). All the other inode fields are | 393 | * deadlock with 'ubifs_writepage()' (see file.c). All the other inode fields |
394 | * changed under @ui_mutex, so they do not need "shadow" fields. Note, one | 394 | * are changed under @ui_mutex, so they do not need "shadow" fields. Note, one |
395 | * could consider to rework locking and base it on "shadow" fields. | 395 | * could consider to rework locking and base it on "shadow" fields. |
396 | */ | 396 | */ |
397 | struct ubifs_inode { | 397 | struct ubifs_inode { |
@@ -937,6 +937,40 @@ struct ubifs_mount_opts { | |||
937 | unsigned int compr_type:2; | 937 | unsigned int compr_type:2; |
938 | }; | 938 | }; |
939 | 939 | ||
940 | /** | ||
941 | * struct ubifs_budg_info - UBIFS budgeting information. | ||
942 | * @idx_growth: amount of bytes budgeted for index growth | ||
943 | * @data_growth: amount of bytes budgeted for cached data | ||
944 | * @dd_growth: amount of bytes budgeted for cached data that will make | ||
945 | * other data dirty | ||
946 | * @uncommitted_idx: amount of bytes were budgeted for growth of the index, but | ||
947 | * which still have to be taken into account because the index | ||
948 | * has not been committed so far | ||
949 | * @old_idx_sz: size of index on flash | ||
950 | * @min_idx_lebs: minimum number of LEBs required for the index | ||
951 | * @nospace: non-zero if the file-system does not have flash space (used as | ||
952 | * optimization) | ||
953 | * @nospace_rp: the same as @nospace, but additionally means that even reserved | ||
954 | * pool is full | ||
955 | * @page_budget: budget for a page (constant, nenver changed after mount) | ||
956 | * @inode_budget: budget for an inode (constant, nenver changed after mount) | ||
957 | * @dent_budget: budget for a directory entry (constant, nenver changed after | ||
958 | * mount) | ||
959 | */ | ||
960 | struct ubifs_budg_info { | ||
961 | long long idx_growth; | ||
962 | long long data_growth; | ||
963 | long long dd_growth; | ||
964 | long long uncommitted_idx; | ||
965 | unsigned long long old_idx_sz; | ||
966 | int min_idx_lebs; | ||
967 | unsigned int nospace:1; | ||
968 | unsigned int nospace_rp:1; | ||
969 | int page_budget; | ||
970 | int inode_budget; | ||
971 | int dent_budget; | ||
972 | }; | ||
973 | |||
940 | struct ubifs_debug_info; | 974 | struct ubifs_debug_info; |
941 | 975 | ||
942 | /** | 976 | /** |
@@ -980,6 +1014,7 @@ struct ubifs_debug_info; | |||
980 | * @cmt_wq: wait queue to sleep on if the log is full and a commit is running | 1014 | * @cmt_wq: wait queue to sleep on if the log is full and a commit is running |
981 | * | 1015 | * |
982 | * @big_lpt: flag that LPT is too big to write whole during commit | 1016 | * @big_lpt: flag that LPT is too big to write whole during commit |
1017 | * @space_fixup: flag indicating that free space in LEBs needs to be cleaned up | ||
983 | * @no_chk_data_crc: do not check CRCs when reading data nodes (except during | 1018 | * @no_chk_data_crc: do not check CRCs when reading data nodes (except during |
984 | * recovery) | 1019 | * recovery) |
985 | * @bulk_read: enable bulk-reads | 1020 | * @bulk_read: enable bulk-reads |
@@ -1057,32 +1092,14 @@ struct ubifs_debug_info; | |||
1057 | * @dirty_zn_cnt: number of dirty znodes | 1092 | * @dirty_zn_cnt: number of dirty znodes |
1058 | * @clean_zn_cnt: number of clean znodes | 1093 | * @clean_zn_cnt: number of clean znodes |
1059 | * | 1094 | * |
1060 | * @budg_idx_growth: amount of bytes budgeted for index growth | 1095 | * @space_lock: protects @bi and @lst |
1061 | * @budg_data_growth: amount of bytes budgeted for cached data | 1096 | * @lst: lprops statistics |
1062 | * @budg_dd_growth: amount of bytes budgeted for cached data that will make | 1097 | * @bi: budgeting information |
1063 | * other data dirty | ||
1064 | * @budg_uncommitted_idx: amount of bytes were budgeted for growth of the index, | ||
1065 | * but which still have to be taken into account because | ||
1066 | * the index has not been committed so far | ||
1067 | * @space_lock: protects @budg_idx_growth, @budg_data_growth, @budg_dd_growth, | ||
1068 | * @budg_uncommited_idx, @min_idx_lebs, @old_idx_sz, @lst, | ||
1069 | * @nospace, and @nospace_rp; | ||
1070 | * @min_idx_lebs: minimum number of LEBs required for the index | ||
1071 | * @old_idx_sz: size of index on flash | ||
1072 | * @calc_idx_sz: temporary variable which is used to calculate new index size | 1098 | * @calc_idx_sz: temporary variable which is used to calculate new index size |
1073 | * (contains accurate new index size at end of TNC commit start) | 1099 | * (contains accurate new index size at end of TNC commit start) |
1074 | * @lst: lprops statistics | ||
1075 | * @nospace: non-zero if the file-system does not have flash space (used as | ||
1076 | * optimization) | ||
1077 | * @nospace_rp: the same as @nospace, but additionally means that even reserved | ||
1078 | * pool is full | ||
1079 | * | ||
1080 | * @page_budget: budget for a page | ||
1081 | * @inode_budget: budget for an inode | ||
1082 | * @dent_budget: budget for a directory entry | ||
1083 | * | 1100 | * |
1084 | * @ref_node_alsz: size of the LEB reference node aligned to the min. flash | 1101 | * @ref_node_alsz: size of the LEB reference node aligned to the min. flash |
1085 | * I/O unit | 1102 | * I/O unit |
1086 | * @mst_node_alsz: master node aligned size | 1103 | * @mst_node_alsz: master node aligned size |
1087 | * @min_idx_node_sz: minimum indexing node aligned on 8-bytes boundary | 1104 | * @min_idx_node_sz: minimum indexing node aligned on 8-bytes boundary |
1088 | * @max_idx_node_sz: maximum indexing node aligned on 8-bytes boundary | 1105 | * @max_idx_node_sz: maximum indexing node aligned on 8-bytes boundary |
@@ -1189,7 +1206,6 @@ struct ubifs_debug_info; | |||
1189 | * @replaying: %1 during journal replay | 1206 | * @replaying: %1 during journal replay |
1190 | * @mounting: %1 while mounting | 1207 | * @mounting: %1 while mounting |
1191 | * @remounting_rw: %1 while re-mounting from R/O mode to R/W mode | 1208 | * @remounting_rw: %1 while re-mounting from R/O mode to R/W mode |
1192 | * @replay_tree: temporary tree used during journal replay | ||
1193 | * @replay_list: temporary list used during journal replay | 1209 | * @replay_list: temporary list used during journal replay |
1194 | * @replay_buds: list of buds to replay | 1210 | * @replay_buds: list of buds to replay |
1195 | * @cs_sqnum: sequence number of first node in the log (commit start node) | 1211 | * @cs_sqnum: sequence number of first node in the log (commit start node) |
@@ -1238,6 +1254,7 @@ struct ubifs_info { | |||
1238 | wait_queue_head_t cmt_wq; | 1254 | wait_queue_head_t cmt_wq; |
1239 | 1255 | ||
1240 | unsigned int big_lpt:1; | 1256 | unsigned int big_lpt:1; |
1257 | unsigned int space_fixup:1; | ||
1241 | unsigned int no_chk_data_crc:1; | 1258 | unsigned int no_chk_data_crc:1; |
1242 | unsigned int bulk_read:1; | 1259 | unsigned int bulk_read:1; |
1243 | unsigned int default_compr:2; | 1260 | unsigned int default_compr:2; |
@@ -1308,21 +1325,10 @@ struct ubifs_info { | |||
1308 | atomic_long_t dirty_zn_cnt; | 1325 | atomic_long_t dirty_zn_cnt; |
1309 | atomic_long_t clean_zn_cnt; | 1326 | atomic_long_t clean_zn_cnt; |
1310 | 1327 | ||
1311 | long long budg_idx_growth; | ||
1312 | long long budg_data_growth; | ||
1313 | long long budg_dd_growth; | ||
1314 | long long budg_uncommitted_idx; | ||
1315 | spinlock_t space_lock; | 1328 | spinlock_t space_lock; |
1316 | int min_idx_lebs; | ||
1317 | unsigned long long old_idx_sz; | ||
1318 | unsigned long long calc_idx_sz; | ||
1319 | struct ubifs_lp_stats lst; | 1329 | struct ubifs_lp_stats lst; |
1320 | unsigned int nospace:1; | 1330 | struct ubifs_budg_info bi; |
1321 | unsigned int nospace_rp:1; | 1331 | unsigned long long calc_idx_sz; |
1322 | |||
1323 | int page_budget; | ||
1324 | int inode_budget; | ||
1325 | int dent_budget; | ||
1326 | 1332 | ||
1327 | int ref_node_alsz; | 1333 | int ref_node_alsz; |
1328 | int mst_node_alsz; | 1334 | int mst_node_alsz; |
@@ -1430,7 +1436,6 @@ struct ubifs_info { | |||
1430 | unsigned int replaying:1; | 1436 | unsigned int replaying:1; |
1431 | unsigned int mounting:1; | 1437 | unsigned int mounting:1; |
1432 | unsigned int remounting_rw:1; | 1438 | unsigned int remounting_rw:1; |
1433 | struct rb_root replay_tree; | ||
1434 | struct list_head replay_list; | 1439 | struct list_head replay_list; |
1435 | struct list_head replay_buds; | 1440 | struct list_head replay_buds; |
1436 | unsigned long long cs_sqnum; | 1441 | unsigned long long cs_sqnum; |
@@ -1628,6 +1633,7 @@ int ubifs_write_master(struct ubifs_info *c); | |||
1628 | int ubifs_read_superblock(struct ubifs_info *c); | 1633 | int ubifs_read_superblock(struct ubifs_info *c); |
1629 | struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c); | 1634 | struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c); |
1630 | int ubifs_write_sb_node(struct ubifs_info *c, struct ubifs_sb_node *sup); | 1635 | int ubifs_write_sb_node(struct ubifs_info *c, struct ubifs_sb_node *sup); |
1636 | int ubifs_fixup_free_space(struct ubifs_info *c); | ||
1631 | 1637 | ||
1632 | /* replay.c */ | 1638 | /* replay.c */ |
1633 | int ubifs_validate_entry(struct ubifs_info *c, | 1639 | int ubifs_validate_entry(struct ubifs_info *c, |