Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0+ */ 2 : /* 3 : * Copyright (C) 2016 Oracle. All Rights Reserved. 4 : * Author: Darrick J. Wong <darrick.wong@oracle.com> 5 : */ 6 : #ifndef __XFS_AG_RESV_H__ 7 : #define __XFS_AG_RESV_H__ 8 : 9 : int xfs_ag_resv_free(struct xfs_perag *pag); 10 : int xfs_ag_resv_init(struct xfs_perag *pag, struct xfs_trans *tp); 11 : 12 : bool xfs_ag_resv_critical(struct xfs_perag *pag, enum xfs_ag_resv_type type); 13 : xfs_extlen_t xfs_ag_resv_needed(struct xfs_perag *pag, 14 : enum xfs_ag_resv_type type); 15 : 16 : void xfs_ag_resv_alloc_extent(struct xfs_perag *pag, enum xfs_ag_resv_type type, 17 : struct xfs_alloc_arg *args); 18 : void xfs_ag_resv_free_extent(struct xfs_perag *pag, enum xfs_ag_resv_type type, 19 : struct xfs_trans *tp, xfs_extlen_t len); 20 : 21 : static inline struct xfs_ag_resv * 22 : xfs_perag_resv( 23 : struct xfs_perag *pag, 24 : enum xfs_ag_resv_type type) 25 : { 26 4700461 : switch (type) { 27 2990943 : case XFS_AG_RESV_METADATA: 28 2990943 : return &pag->pag_meta_resv; 29 2543861 : case XFS_AG_RESV_RMAPBT: 30 2543861 : return &pag->pag_rmapbt_resv; 31 : default: 32 : return NULL; 33 : } 34 : } 35 : 36 : /* 37 : * RMAPBT reservation accounting wrappers. Since rmapbt blocks are sourced from 38 : * the AGFL, they are allocated one at a time and the reservation updates don't 39 : * require a transaction. 40 : */ 41 : static inline void 42 650390 : xfs_ag_resv_rmapbt_alloc( 43 : struct xfs_mount *mp, 44 : xfs_agnumber_t agno) 45 : { 46 650390 : struct xfs_alloc_arg args = { NULL }; 47 650390 : struct xfs_perag *pag; 48 : 49 650390 : args.len = 1; 50 650390 : pag = xfs_perag_get(mp, agno); 51 650390 : xfs_ag_resv_alloc_extent(pag, XFS_AG_RESV_RMAPBT, &args); 52 650390 : xfs_perag_put(pag); 53 650390 : } 54 : 55 : #endif /* __XFS_AG_RESV_H__ */