Lines Matching full:ac

96 static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac,
121 struct ocfs2_alloc_context **ac);
123 void ocfs2_free_ac_resource(struct ocfs2_alloc_context *ac) in ocfs2_free_ac_resource() argument
125 struct inode *inode = ac->ac_inode; in ocfs2_free_ac_resource()
128 if (ac->ac_which != OCFS2_AC_USE_LOCAL) in ocfs2_free_ac_resource()
134 ac->ac_inode = NULL; in ocfs2_free_ac_resource()
136 brelse(ac->ac_bh); in ocfs2_free_ac_resource()
137 ac->ac_bh = NULL; in ocfs2_free_ac_resource()
138 ac->ac_resv = NULL; in ocfs2_free_ac_resource()
139 kfree(ac->ac_find_loc_priv); in ocfs2_free_ac_resource()
140 ac->ac_find_loc_priv = NULL; in ocfs2_free_ac_resource()
143 void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac) in ocfs2_free_alloc_context() argument
145 ocfs2_free_ac_resource(ac); in ocfs2_free_alloc_context()
146 kfree(ac); in ocfs2_free_alloc_context()
492 struct ocfs2_alloc_context *ac, in ocfs2_block_group_alloc_contig() argument
501 status = ocfs2_claim_clusters(handle, ac, in ocfs2_block_group_alloc_contig()
536 struct ocfs2_alloc_context *ac, in ocfs2_block_group_claim_bits() argument
543 status = ocfs2_claim_clusters(handle, ac, min_bits, in ocfs2_block_group_claim_bits()
557 struct ocfs2_alloc_context *ac, in ocfs2_block_group_grow_discontig() argument
584 status = ocfs2_block_group_claim_bits(osb, handle, ac, in ocfs2_block_group_grow_discontig()
649 struct ocfs2_alloc_context *ac, in ocfs2_block_group_alloc_discontig() argument
678 ac->ac_disable_chain_relink = 1; in ocfs2_block_group_alloc_discontig()
681 status = ocfs2_block_group_claim_bits(osb, handle, ac, min_bits, in ocfs2_block_group_alloc_discontig()
711 bg_bh, ac, cl, min_bits); in ocfs2_block_group_alloc_discontig()
717 ocfs2_bg_alloc_cleanup(handle, ac, alloc_inode, bg_bh); in ocfs2_block_group_alloc_discontig()
734 struct ocfs2_alloc_context *ac = NULL; in ocfs2_block_group_alloc() local
745 max_block, flags, &ac); in ocfs2_block_group_alloc()
765 ac->ac_last_group = *last_alloc_group; in ocfs2_block_group_alloc()
769 ac, cl); in ocfs2_block_group_alloc()
771 ac->ac_which = OCFS2_AC_USE_MAIN_DISCONTIG; in ocfs2_block_group_alloc()
774 ac, cl); in ocfs2_block_group_alloc()
821 *last_alloc_group = ac->ac_last_group; in ocfs2_block_group_alloc()
827 if (ac) in ocfs2_block_group_alloc()
828 ocfs2_free_alloc_context(ac); in ocfs2_block_group_alloc()
838 struct ocfs2_alloc_context *ac, in ocfs2_reserve_suballoc_bits() argument
845 u32 bits_wanted = ac->ac_bits_wanted; in ocfs2_reserve_suballoc_bits()
868 ac->ac_inode = alloc_inode; in ocfs2_reserve_suballoc_bits()
869 ac->ac_alloc_slot = slot; in ocfs2_reserve_suballoc_bits()
904 ac->ac_max_block, in ocfs2_reserve_suballoc_bits()
920 ac->ac_bh = bh; in ocfs2_reserve_suballoc_bits()
986 struct ocfs2_alloc_context *ac, in ocfs2_steal_resource() argument
1003 status = ocfs2_reserve_suballoc_bits(osb, ac, in ocfs2_steal_resource()
1012 ocfs2_free_ac_resource(ac); in ocfs2_steal_resource()
1019 struct ocfs2_alloc_context *ac) in ocfs2_steal_inode() argument
1021 return ocfs2_steal_resource(osb, ac, INODE_ALLOC_SYSTEM_INODE); in ocfs2_steal_inode()
1025 struct ocfs2_alloc_context *ac) in ocfs2_steal_meta() argument
1027 return ocfs2_steal_resource(osb, ac, EXTENT_ALLOC_SYSTEM_INODE); in ocfs2_steal_meta()
1032 struct ocfs2_alloc_context **ac) in ocfs2_reserve_new_metadata_blocks() argument
1037 *ac = kzalloc_obj(struct ocfs2_alloc_context); in ocfs2_reserve_new_metadata_blocks()
1038 if (!(*ac)) { in ocfs2_reserve_new_metadata_blocks()
1044 (*ac)->ac_bits_wanted = blocks; in ocfs2_reserve_new_metadata_blocks()
1045 (*ac)->ac_which = OCFS2_AC_USE_META; in ocfs2_reserve_new_metadata_blocks()
1046 (*ac)->ac_group_search = ocfs2_block_group_search; in ocfs2_reserve_new_metadata_blocks()
1053 status = ocfs2_reserve_suballoc_bits(osb, (*ac), in ocfs2_reserve_new_metadata_blocks()
1069 ocfs2_free_ac_resource(*ac); in ocfs2_reserve_new_metadata_blocks()
1072 status = ocfs2_steal_meta(osb, *ac); in ocfs2_reserve_new_metadata_blocks()
1082 if ((status < 0) && *ac) { in ocfs2_reserve_new_metadata_blocks()
1083 ocfs2_free_alloc_context(*ac); in ocfs2_reserve_new_metadata_blocks()
1084 *ac = NULL; in ocfs2_reserve_new_metadata_blocks()
1094 struct ocfs2_alloc_context **ac) in ocfs2_reserve_new_metadata() argument
1098 ac); in ocfs2_reserve_new_metadata()
1102 struct ocfs2_alloc_context **ac) in ocfs2_reserve_new_inode() argument
1108 *ac = kzalloc_obj(struct ocfs2_alloc_context); in ocfs2_reserve_new_inode()
1109 if (!(*ac)) { in ocfs2_reserve_new_inode()
1115 (*ac)->ac_bits_wanted = 1; in ocfs2_reserve_new_inode()
1116 (*ac)->ac_which = OCFS2_AC_USE_INODE; in ocfs2_reserve_new_inode()
1118 (*ac)->ac_group_search = ocfs2_block_group_search; in ocfs2_reserve_new_inode()
1126 (*ac)->ac_max_block = (u32)~0U; in ocfs2_reserve_new_inode()
1143 status = ocfs2_reserve_suballoc_bits(osb, *ac, in ocfs2_reserve_new_inode()
1170 ocfs2_free_ac_resource(*ac); in ocfs2_reserve_new_inode()
1173 status = ocfs2_steal_inode(osb, *ac); in ocfs2_reserve_new_inode()
1183 if ((status < 0) && *ac) { in ocfs2_reserve_new_inode()
1184 ocfs2_free_alloc_context(*ac); in ocfs2_reserve_new_inode()
1185 *ac = NULL; in ocfs2_reserve_new_inode()
1196 struct ocfs2_alloc_context *ac) in ocfs2_reserve_cluster_bitmap_bits() argument
1200 ac->ac_which = OCFS2_AC_USE_MAIN; in ocfs2_reserve_cluster_bitmap_bits()
1201 ac->ac_group_search = ocfs2_cluster_group_search; in ocfs2_reserve_cluster_bitmap_bits()
1203 status = ocfs2_reserve_suballoc_bits(osb, ac, in ocfs2_reserve_cluster_bitmap_bits()
1219 struct ocfs2_alloc_context **ac) in ocfs2_reserve_clusters_with_limit() argument
1224 *ac = kzalloc_obj(struct ocfs2_alloc_context); in ocfs2_reserve_clusters_with_limit()
1225 if (!(*ac)) { in ocfs2_reserve_clusters_with_limit()
1231 (*ac)->ac_bits_wanted = bits_wanted; in ocfs2_reserve_clusters_with_limit()
1232 (*ac)->ac_max_block = max_block; in ocfs2_reserve_clusters_with_limit()
1239 *ac); in ocfs2_reserve_clusters_with_limit()
1248 status = ocfs2_reserve_cluster_bitmap_bits(osb, *ac); in ocfs2_reserve_clusters_with_limit()
1252 ocfs2_inode_unlock((*ac)->ac_inode, 1); in ocfs2_reserve_clusters_with_limit()
1253 inode_unlock((*ac)->ac_inode); in ocfs2_reserve_clusters_with_limit()
1257 iput((*ac)->ac_inode); in ocfs2_reserve_clusters_with_limit()
1258 (*ac)->ac_inode = NULL; in ocfs2_reserve_clusters_with_limit()
1265 inode_lock((*ac)->ac_inode); in ocfs2_reserve_clusters_with_limit()
1266 ret = ocfs2_inode_lock((*ac)->ac_inode, NULL, 1); in ocfs2_reserve_clusters_with_limit()
1269 inode_unlock((*ac)->ac_inode); in ocfs2_reserve_clusters_with_limit()
1270 iput((*ac)->ac_inode); in ocfs2_reserve_clusters_with_limit()
1271 (*ac)->ac_inode = NULL; in ocfs2_reserve_clusters_with_limit()
1284 if ((status < 0) && *ac) { in ocfs2_reserve_clusters_with_limit()
1285 ocfs2_free_alloc_context(*ac); in ocfs2_reserve_clusters_with_limit()
1286 *ac = NULL; in ocfs2_reserve_clusters_with_limit()
1296 struct ocfs2_alloc_context **ac) in ocfs2_reserve_clusters() argument
1299 ALLOC_NEW_GROUP, ac); in ocfs2_reserve_clusters()
1761 static void ocfs2_bg_discontig_fix_result(struct ocfs2_alloc_context *ac, in ocfs2_bg_discontig_fix_result() argument
1768 struct ocfs2_dinode *di = (struct ocfs2_dinode *)ac->ac_bh->b_data; in ocfs2_bg_discontig_fix_result()
1771 if (ocfs2_is_cluster_bitmap(ac->ac_inode)) { in ocfs2_bg_discontig_fix_result()
1778 if (!ocfs2_supports_discontig_bg(OCFS2_SB(ac->ac_inode->i_sb)) || in ocfs2_bg_discontig_fix_result()
1791 static int ocfs2_search_one_group(struct ocfs2_alloc_context *ac, in ocfs2_search_one_group() argument
1801 struct ocfs2_dinode *di = (struct ocfs2_dinode *)ac->ac_bh->b_data; in ocfs2_search_one_group()
1802 struct inode *alloc_inode = ac->ac_inode; in ocfs2_search_one_group()
1814 ret = ac->ac_group_search(alloc_inode, group_bh, bits_wanted, min_bits, in ocfs2_search_one_group()
1815 ac->ac_max_block, res); in ocfs2_search_one_group()
1823 ocfs2_bg_discontig_fix_result(ac, gd, res); in ocfs2_search_one_group()
1831 if (ac->ac_find_loc_only) in ocfs2_search_one_group()
1834 ret = ocfs2_alloc_dinode_update_counts(alloc_inode, handle, ac->ac_bh, in ocfs2_search_one_group()
1846 ocfs2_rollback_alloc_dinode_counts(alloc_inode, ac->ac_bh, in ocfs2_search_one_group()
1861 static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, in ocfs2_search_chain() argument
1872 struct inode *alloc_inode = ac->ac_inode; in ocfs2_search_chain()
1875 struct ocfs2_dinode *fe = (struct ocfs2_dinode *) ac->ac_bh->b_data; in ocfs2_search_chain()
1879 chain = ac->ac_chain; in ocfs2_search_chain()
1897 if (ac->ac_which == OCFS2_AC_USE_MAIN_DISCONTIG) { in ocfs2_search_chain()
1906 status = ac->ac_group_search(alloc_inode, group_bh, in ocfs2_search_chain()
1908 ac->ac_max_block, res); in ocfs2_search_chain()
1941 ocfs2_bg_discontig_fix_result(ac, bg, res); in ocfs2_search_chain()
1962 if (!ac->ac_disable_chain_relink && in ocfs2_search_chain()
1966 ac->ac_bh, group_bh, in ocfs2_search_chain()
1974 if (ac->ac_find_loc_only) in ocfs2_search_chain()
1978 ac->ac_bh, res->sr_bits, in ocfs2_search_chain()
1995 ac->ac_bh, res->sr_bits, chain); in ocfs2_search_chain()
2016 static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, in ocfs2_claim_suballoc_bits() argument
2026 u64 hint = ac->ac_last_group; in ocfs2_claim_suballoc_bits()
2030 BUG_ON(ac->ac_bits_given >= ac->ac_bits_wanted); in ocfs2_claim_suballoc_bits()
2031 BUG_ON(bits_wanted > (ac->ac_bits_wanted - ac->ac_bits_given)); in ocfs2_claim_suballoc_bits()
2032 BUG_ON(!ac->ac_bh); in ocfs2_claim_suballoc_bits()
2034 fe = (struct ocfs2_dinode *) ac->ac_bh->b_data; in ocfs2_claim_suballoc_bits()
2042 status = ocfs2_error(ac->ac_inode->i_sb, in ocfs2_claim_suballoc_bits()
2057 status = ocfs2_search_one_group(ac, handle, bits_wanted, in ocfs2_claim_suballoc_bits()
2075 status = ocfs2_error(ac->ac_inode->i_sb, in ocfs2_claim_suballoc_bits()
2085 ac->ac_chain = victim; in ocfs2_claim_suballoc_bits()
2088 status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits, in ocfs2_claim_suballoc_bits()
2091 if (ocfs2_is_cluster_bitmap(ac->ac_inode)) in ocfs2_claim_suballoc_bits()
2108 ac->ac_disable_chain_relink = 1; in ocfs2_claim_suballoc_bits()
2115 ac->ac_chain = i; in ocfs2_claim_suballoc_bits()
2116 status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits, in ocfs2_claim_suballoc_bits()
2132 status == -ENOSPC && ac->ac_which == OCFS2_AC_USE_MAIN) { in ocfs2_claim_suballoc_bits()
2133 ac->ac_which = OCFS2_AC_USE_MAIN_DISCONTIG; in ocfs2_claim_suballoc_bits()
2134 ac->ac_chain = victim; in ocfs2_claim_suballoc_bits()
2144 ac->ac_last_group = 0; in ocfs2_claim_suballoc_bits()
2146 ac->ac_last_group = hint; in ocfs2_claim_suballoc_bits()
2156 struct ocfs2_alloc_context *ac, in ocfs2_claim_metadata() argument
2166 BUG_ON(!ac); in ocfs2_claim_metadata()
2167 BUG_ON(ac->ac_bits_wanted < (ac->ac_bits_given + bits_wanted)); in ocfs2_claim_metadata()
2168 BUG_ON(ac->ac_which != OCFS2_AC_USE_META); in ocfs2_claim_metadata()
2170 status = ocfs2_claim_suballoc_bits(ac, in ocfs2_claim_metadata()
2179 atomic_inc(&OCFS2_SB(ac->ac_inode->i_sb)->alloc_stats.bg_allocs); in ocfs2_claim_metadata()
2184 ac->ac_bits_given += res.sr_bits; in ocfs2_claim_metadata()
2196 * ac->ac_last_group need to verify.
2201 struct ocfs2_alloc_context *ac) in ocfs2_init_inode_ac_group() argument
2215 OCFS2_I(dir)->ip_last_used_slot == ac->ac_alloc_slot) in ocfs2_init_inode_ac_group()
2216 ac->ac_last_group = OCFS2_I(dir)->ip_last_used_group; in ocfs2_init_inode_ac_group()
2217 else if (le16_to_cpu(di->i_suballoc_slot) == ac->ac_alloc_slot) { in ocfs2_init_inode_ac_group()
2219 ac->ac_last_group = le64_to_cpu(di->i_suballoc_loc); in ocfs2_init_inode_ac_group()
2221 ac->ac_last_group = ocfs2_which_suballoc_group( in ocfs2_init_inode_ac_group()
2228 struct ocfs2_alloc_context *ac) in ocfs2_save_inode_ac_group() argument
2230 OCFS2_I(dir)->ip_last_used_group = ac->ac_last_group; in ocfs2_save_inode_ac_group()
2231 OCFS2_I(dir)->ip_last_used_slot = ac->ac_alloc_slot; in ocfs2_save_inode_ac_group()
2236 struct ocfs2_alloc_context *ac, in ocfs2_find_new_inode_loc() argument
2243 BUG_ON(!ac); in ocfs2_find_new_inode_loc()
2244 BUG_ON(ac->ac_bits_given != 0); in ocfs2_find_new_inode_loc()
2245 BUG_ON(ac->ac_bits_wanted != 1); in ocfs2_find_new_inode_loc()
2246 BUG_ON(ac->ac_which != OCFS2_AC_USE_INODE); in ocfs2_find_new_inode_loc()
2255 ocfs2_init_inode_ac_group(dir, parent_fe_bh, ac); in ocfs2_find_new_inode_loc()
2274 ac->ac_find_loc_only = 1; in ocfs2_find_new_inode_loc()
2276 ret = ocfs2_claim_suballoc_bits(ac, handle, 1, 1, res); in ocfs2_find_new_inode_loc()
2282 ac->ac_find_loc_priv = res; in ocfs2_find_new_inode_loc()
2297 struct ocfs2_alloc_context *ac, in ocfs2_claim_new_inode_at_loc() argument
2304 struct ocfs2_suballoc_result *res = ac->ac_find_loc_priv; in ocfs2_claim_new_inode_at_loc()
2307 struct ocfs2_dinode *di = (struct ocfs2_dinode *) ac->ac_bh->b_data; in ocfs2_claim_new_inode_at_loc()
2317 ret = ocfs2_read_group_descriptor(ac->ac_inode, di, in ocfs2_claim_new_inode_at_loc()
2327 ret = ocfs2_alloc_dinode_update_counts(ac->ac_inode, handle, in ocfs2_claim_new_inode_at_loc()
2328 ac->ac_bh, res->sr_bits, in ocfs2_claim_new_inode_at_loc()
2336 ac->ac_inode, in ocfs2_claim_new_inode_at_loc()
2344 ocfs2_rollback_alloc_dinode_counts(ac->ac_inode, in ocfs2_claim_new_inode_at_loc()
2345 ac->ac_bh, res->sr_bits, chain); in ocfs2_claim_new_inode_at_loc()
2353 atomic_inc(&OCFS2_SB(ac->ac_inode->i_sb)->alloc_stats.bg_allocs); in ocfs2_claim_new_inode_at_loc()
2359 ac->ac_bits_given++; in ocfs2_claim_new_inode_at_loc()
2360 ocfs2_save_inode_ac_group(dir, ac); in ocfs2_claim_new_inode_at_loc()
2371 struct ocfs2_alloc_context *ac, in ocfs2_claim_new_inode() argument
2379 BUG_ON(!ac); in ocfs2_claim_new_inode()
2380 BUG_ON(ac->ac_bits_given != 0); in ocfs2_claim_new_inode()
2381 BUG_ON(ac->ac_bits_wanted != 1); in ocfs2_claim_new_inode()
2382 BUG_ON(ac->ac_which != OCFS2_AC_USE_INODE); in ocfs2_claim_new_inode()
2384 ocfs2_init_inode_ac_group(dir, parent_fe_bh, ac); in ocfs2_claim_new_inode()
2386 status = ocfs2_claim_suballoc_bits(ac, in ocfs2_claim_new_inode()
2395 atomic_inc(&OCFS2_SB(ac->ac_inode->i_sb)->alloc_stats.bg_allocs); in ocfs2_claim_new_inode()
2402 ac->ac_bits_given++; in ocfs2_claim_new_inode()
2403 ocfs2_save_inode_ac_group(dir, ac); in ocfs2_claim_new_inode()
2473 struct ocfs2_alloc_context *ac, in __ocfs2_claim_clusters() argument
2482 struct ocfs2_super *osb = OCFS2_SB(ac->ac_inode->i_sb); in __ocfs2_claim_clusters()
2484 BUG_ON(ac->ac_bits_given >= ac->ac_bits_wanted); in __ocfs2_claim_clusters()
2486 BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL in __ocfs2_claim_clusters()
2487 && ac->ac_which != OCFS2_AC_USE_MAIN in __ocfs2_claim_clusters()
2488 && ac->ac_which != OCFS2_AC_USE_MAIN_DISCONTIG); in __ocfs2_claim_clusters()
2490 if (ac->ac_which == OCFS2_AC_USE_LOCAL) { in __ocfs2_claim_clusters()
2495 ac, in __ocfs2_claim_clusters()
2515 status = ocfs2_claim_suballoc_bits(ac, in __ocfs2_claim_clusters()
2523 ocfs2_desc_bitmap_to_cluster_off(ac->ac_inode, in __ocfs2_claim_clusters()
2536 ac->ac_bits_given += *num_clusters; in __ocfs2_claim_clusters()
2545 struct ocfs2_alloc_context *ac, in ocfs2_claim_clusters() argument
2550 unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given; in ocfs2_claim_clusters()
2552 return __ocfs2_claim_clusters(handle, ac, min_clusters, in ocfs2_claim_clusters()