LCOV - code coverage report
Current view: top level - fs/xfs/libxfs - xfs_ag_resv.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-djwa @ Mon Jul 31 20:08:17 PDT 2023 Lines: 13 13 100.0 %
Date: 2023-07-31 20:08:17 Functions: 1 1 100.0 %

          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     1689872 :         switch (type) {
      27     1020165 :         case XFS_AG_RESV_METADATA:
      28     1020165 :                 return &pag->pag_meta_resv;
      29      906644 :         case XFS_AG_RESV_RMAPBT:
      30      906644 :                 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      297257 : xfs_ag_resv_rmapbt_alloc(
      43             :         struct xfs_mount        *mp,
      44             :         xfs_agnumber_t          agno)
      45             : {
      46      297257 :         struct xfs_alloc_arg    args = { NULL };
      47      297257 :         struct xfs_perag        *pag;
      48             : 
      49      297257 :         args.len = 1;
      50      297257 :         pag = xfs_perag_get(mp, agno);
      51      297257 :         xfs_ag_resv_alloc_extent(pag, XFS_AG_RESV_RMAPBT, &args);
      52      297257 :         xfs_perag_put(pag);
      53      297257 : }
      54             : 
      55             : #endif  /* __XFS_AG_RESV_H__ */

Generated by: LCOV version 1.14