Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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_ */