^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* -*- mode: c; c-basic-offset: 8; -*-
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * vim: noexpandtab sw=8 ts=8 sts=0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * suballoc.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Defines sub allocator api
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Copyright (C) 2003, 2004 Oracle. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #ifndef _CHAINALLOC_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define _CHAINALLOC_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) struct ocfs2_suballoc_result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) typedef int (group_search_t)(struct inode *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) struct buffer_head *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) u32, /* bits_wanted */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) u32, /* min_bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) u64, /* max_block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) struct ocfs2_suballoc_result *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) /* found bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct ocfs2_alloc_context {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct inode *ac_inode; /* which bitmap are we allocating from? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct buffer_head *ac_bh; /* file entry bh */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) u32 ac_alloc_slot; /* which slot are we allocating from? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) u32 ac_bits_wanted;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) u32 ac_bits_given;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define OCFS2_AC_USE_LOCAL 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define OCFS2_AC_USE_MAIN 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define OCFS2_AC_USE_INODE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define OCFS2_AC_USE_META 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) u32 ac_which;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /* these are used by the chain search */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) u16 ac_chain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) int ac_disable_chain_relink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) group_search_t *ac_group_search;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) u64 ac_last_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) u64 ac_max_block; /* Highest block number to allocate. 0 is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) the same as ~0 - unlimited */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) int ac_find_loc_only; /* hack for reflink operation ordering */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) struct ocfs2_suballoc_result *ac_find_loc_priv; /* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) struct ocfs2_alloc_reservation *ac_resv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) void ocfs2_init_steal_slots(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) static inline int ocfs2_alloc_context_bits_left(struct ocfs2_alloc_context *ac)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) return ac->ac_bits_wanted - ac->ac_bits_given;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) * Please note that the caller must make sure that root_el is the root
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) * of extent tree. So for an inode, it should be &fe->id2.i_list. Otherwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) * the result may be wrong.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) int ocfs2_reserve_new_metadata(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) struct ocfs2_extent_list *root_el,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct ocfs2_alloc_context **ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) int ocfs2_reserve_new_metadata_blocks(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) int blocks,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) struct ocfs2_alloc_context **ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) int ocfs2_reserve_new_inode(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) struct ocfs2_alloc_context **ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) int ocfs2_reserve_clusters(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) u32 bits_wanted,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) struct ocfs2_alloc_context **ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) int ocfs2_alloc_dinode_update_counts(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) struct buffer_head *di_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) u32 num_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) u16 chain);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) void ocfs2_rollback_alloc_dinode_counts(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) struct buffer_head *di_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) u32 num_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) u16 chain);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) int ocfs2_block_group_set_bits(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) struct inode *alloc_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) struct ocfs2_group_desc *bg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) struct buffer_head *group_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) unsigned int bit_off,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) unsigned int num_bits);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) int ocfs2_claim_metadata(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) struct ocfs2_alloc_context *ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) u32 bits_wanted,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) u64 *suballoc_loc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) u16 *suballoc_bit_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) u32 *num_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) u64 *blkno_start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) int ocfs2_claim_new_inode(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) struct inode *dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) struct buffer_head *parent_fe_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) struct ocfs2_alloc_context *ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) u64 *suballoc_loc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) u16 *suballoc_bit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) u64 *fe_blkno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) int ocfs2_claim_clusters(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) struct ocfs2_alloc_context *ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) u32 min_clusters,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) u32 *cluster_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) u32 *num_clusters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) * Use this variant of ocfs2_claim_clusters to specify a maxiumum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * number of clusters smaller than the allocation reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) int __ocfs2_claim_clusters(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) struct ocfs2_alloc_context *ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) u32 min_clusters,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) u32 max_clusters,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) u32 *cluster_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) u32 *num_clusters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) int ocfs2_free_suballoc_bits(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) struct inode *alloc_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct buffer_head *alloc_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) unsigned int start_bit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) u64 bg_blkno,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) unsigned int count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) int ocfs2_free_dinode(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) struct inode *inode_alloc_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct buffer_head *inode_alloc_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct ocfs2_dinode *di);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) int ocfs2_free_clusters(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) struct inode *bitmap_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct buffer_head *bitmap_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) u64 start_blk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) unsigned int num_clusters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) int ocfs2_release_clusters(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) struct inode *bitmap_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) struct buffer_head *bitmap_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) u64 start_blk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) unsigned int num_clusters);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) static inline u64 ocfs2_which_suballoc_group(u64 block, unsigned int bit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) u64 group = block - (u64) bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) return group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) static inline u32 ocfs2_cluster_from_desc(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) u64 bg_blkno)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) /* This should work for all block group descriptors as only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) * the 1st group descriptor of the cluster bitmap is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) * different. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) if (bg_blkno == osb->first_cluster_group_blkno)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) /* the rest of the block groups are located at the beginning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) * of their 1st cluster, so a direct translation just
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) * works. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) return ocfs2_blocks_to_clusters(osb->sb, bg_blkno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) static inline int ocfs2_is_cluster_bitmap(struct inode *inode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) return osb->bitmap_blkno == OCFS2_I(inode)->ip_blkno;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) /* This is for local alloc ONLY. Others should use the task-specific
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) * apis above. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) int ocfs2_reserve_cluster_bitmap_bits(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) struct ocfs2_alloc_context *ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) void ocfs2_free_ac_resource(struct ocfs2_alloc_context *ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) /* given a cluster offset, calculate which block group it belongs to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) * and return that block offset. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) u64 ocfs2_which_cluster_group(struct inode *inode, u32 cluster);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) * By default, ocfs2_read_group_descriptor() calls ocfs2_error() when it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) * finds a problem. A caller that wants to check a group descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) * without going readonly should read the block with ocfs2_read_block[s]()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) * and then checking it with this function. This is only resize, really.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) * Everyone else should be using ocfs2_read_group_descriptor().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) int ocfs2_check_group_descriptor(struct super_block *sb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct ocfs2_dinode *di,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct buffer_head *bh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) * Read a group descriptor block into *bh. If *bh is NULL, a bh will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) * allocated. This is a cached read. The descriptor will be validated with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) * ocfs2_validate_group_descriptor().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) int ocfs2_read_group_descriptor(struct inode *inode, struct ocfs2_dinode *di,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) u64 gd_blkno, struct buffer_head **bh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) int ocfs2_lock_allocators(struct inode *inode, struct ocfs2_extent_tree *et,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) u32 clusters_to_add, u32 extents_to_split,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) struct ocfs2_alloc_context **data_ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) struct ocfs2_alloc_context **meta_ac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) * The following two interfaces are for ocfs2_create_inode_in_orphan().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) int ocfs2_find_new_inode_loc(struct inode *dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) struct buffer_head *parent_fe_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) struct ocfs2_alloc_context *ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) u64 *fe_blkno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) int ocfs2_claim_new_inode_at_loc(handle_t *handle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) struct inode *dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) struct ocfs2_alloc_context *ac,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) u64 *suballoc_loc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) u16 *suballoc_bit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) u64 di_blkno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #endif /* _CHAINALLOC_H_ */