| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _LIBXFS_ZONES_H |
| #define _LIBXFS_ZONES_H |
| |
| struct xfs_rtgroup; |
| |
| /* |
| * In order to guarantee forward progress for GC we need to reserve at least |
| * two zones: one that will be used for moving data into and one spare zone |
| * making sure that we have enough space to relocate a nearly-full zone. |
| * To allow for slightly sloppy accounting for when we need to reserve the |
| * second zone, we actually reserve three as that is easier than doing fully |
| * accurate bookkeeping. |
| */ |
| #define XFS_GC_ZONES 3U |
| |
| /* |
| * In addition we need two zones for user writes, one open zone for writing |
| * and one to still have available blocks without resetting the open zone |
| * when data in the open zone has been freed. |
| */ |
| #define XFS_RESERVED_ZONES (XFS_GC_ZONES + 1) |
| #define XFS_MIN_ZONES (XFS_RESERVED_ZONES + 1) |
| |
| /* |
| * Always keep one zone out of the general open zone pool to allow for GC to |
| * happen while other writers are waiting for free space. |
| */ |
| #define XFS_OPEN_GC_ZONES 1U |
| #define XFS_MIN_OPEN_ZONES (XFS_OPEN_GC_ZONES + 1U) |
| |
| bool xfs_zone_validate(struct blk_zone *zone, struct xfs_rtgroup *rtg, |
| xfs_rgblock_t *write_pointer); |
| |
| #endif /* _LIBXFS_ZONES_H */ |