10b61f8a4SDave Chinner // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
37b718769SNathan Scott * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc.
47b718769SNathan Scott * All Rights Reserved.
51da177e4SLinus Torvalds */
61da177e4SLinus Torvalds #ifndef __XFS_RTALLOC_H__
71da177e4SLinus Torvalds #define __XFS_RTALLOC_H__
81da177e4SLinus Torvalds
9c7298202SDave Chinner /* kernel only definitions and functions */
10c7298202SDave Chinner
111da177e4SLinus Torvalds struct xfs_mount;
121da177e4SLinus Torvalds struct xfs_trans;
131da177e4SLinus Torvalds
141da177e4SLinus Torvalds #ifdef CONFIG_XFS_RT
151da177e4SLinus Torvalds /*
161da177e4SLinus Torvalds * Function prototypes for exported functions.
171da177e4SLinus Torvalds */
181da177e4SLinus Torvalds
191da177e4SLinus Torvalds /*
201da177e4SLinus Torvalds * Allocate an extent in the realtime subvolume, with the usual allocation
211da177e4SLinus Torvalds * parameters. The length units are all in realtime extents, as is the
221da177e4SLinus Torvalds * result block number.
231da177e4SLinus Torvalds */
241da177e4SLinus Torvalds int /* error */
251da177e4SLinus Torvalds xfs_rtallocate_extent(
261da177e4SLinus Torvalds struct xfs_trans *tp, /* transaction pointer */
271da177e4SLinus Torvalds xfs_rtblock_t bno, /* starting block number to allocate */
281da177e4SLinus Torvalds xfs_extlen_t minlen, /* minimum length to allocate */
291da177e4SLinus Torvalds xfs_extlen_t maxlen, /* maximum length to allocate */
301da177e4SLinus Torvalds xfs_extlen_t *len, /* out: actual length allocated */
311da177e4SLinus Torvalds int wasdel, /* was a delayed allocation extent */
321da177e4SLinus Torvalds xfs_extlen_t prod, /* extent product factor */
331da177e4SLinus Torvalds xfs_rtblock_t *rtblock); /* out: start block allocated */
341da177e4SLinus Torvalds
35e820b13bSDarrick J. Wong
361da177e4SLinus Torvalds /*
371da177e4SLinus Torvalds * Initialize realtime fields in the mount structure.
381da177e4SLinus Torvalds */
391da177e4SLinus Torvalds int /* error */
401da177e4SLinus Torvalds xfs_rtmount_init(
411da177e4SLinus Torvalds struct xfs_mount *mp); /* file system mount structure */
42b93b6e43SChristoph Hellwig void
43b93b6e43SChristoph Hellwig xfs_rtunmount_inodes(
44b93b6e43SChristoph Hellwig struct xfs_mount *mp);
451da177e4SLinus Torvalds
461da177e4SLinus Torvalds /*
471da177e4SLinus Torvalds * Get the bitmap and summary inodes into the mount structure
481da177e4SLinus Torvalds * at mount time.
491da177e4SLinus Torvalds */
501da177e4SLinus Torvalds int /* error */
511da177e4SLinus Torvalds xfs_rtmount_inodes(
521da177e4SLinus Torvalds struct xfs_mount *mp); /* file system mount structure */
531da177e4SLinus Torvalds
541da177e4SLinus Torvalds /*
551da177e4SLinus Torvalds * Pick an extent for allocation at the start of a new realtime file.
561da177e4SLinus Torvalds * Use the sequence number stored in the atime field of the bitmap inode.
571da177e4SLinus Torvalds * Translate this to a fraction of the rtextents, and return the product
581da177e4SLinus Torvalds * of rtextents and the fraction.
591da177e4SLinus Torvalds * The fraction sequence is 0, 1/2, 1/4, 3/4, 1/8, ..., 7/8, 1/16, ...
601da177e4SLinus Torvalds */
611da177e4SLinus Torvalds int /* error */
621da177e4SLinus Torvalds xfs_rtpick_extent(
631da177e4SLinus Torvalds struct xfs_mount *mp, /* file system mount point */
641da177e4SLinus Torvalds struct xfs_trans *tp, /* transaction pointer */
651da177e4SLinus Torvalds xfs_extlen_t len, /* allocation length (rtextents) */
661da177e4SLinus Torvalds xfs_rtblock_t *pick); /* result rt extent */
671da177e4SLinus Torvalds
681da177e4SLinus Torvalds /*
691da177e4SLinus Torvalds * Grow the realtime area of the filesystem.
701da177e4SLinus Torvalds */
711da177e4SLinus Torvalds int
721da177e4SLinus Torvalds xfs_growfs_rt(
731da177e4SLinus Torvalds struct xfs_mount *mp, /* file system mount structure */
741da177e4SLinus Torvalds xfs_growfs_rt_t *in); /* user supplied growfs struct */
751da177e4SLinus Torvalds
765a605fd6SDarrick J. Wong int xfs_rtalloc_reinit_frextents(struct xfs_mount *mp);
771da177e4SLinus Torvalds #else
78*fe327b82SDarrick J. Wong # define xfs_rtallocate_extent(t,b,min,max,l,f,p,rb) (-ENOSYS)
79*fe327b82SDarrick J. Wong # define xfs_rtpick_extent(m,t,l,rb) (-ENOSYS)
80*fe327b82SDarrick J. Wong # define xfs_growfs_rt(mp,in) (-ENOSYS)
815a605fd6SDarrick J. Wong # define xfs_rtalloc_reinit_frextents(m) (0)
8232891b29SEric Sandeen static inline int /* error */
xfs_rtmount_init(xfs_mount_t * mp)8332891b29SEric Sandeen xfs_rtmount_init(
8432891b29SEric Sandeen xfs_mount_t *mp) /* file system mount structure */
8532891b29SEric Sandeen {
8632891b29SEric Sandeen if (mp->m_sb.sb_rblocks == 0)
8732891b29SEric Sandeen return 0;
8832891b29SEric Sandeen
890b932cccSDave Chinner xfs_warn(mp, "Not built with CONFIG_XFS_RT");
902451337dSDave Chinner return -ENOSYS;
9132891b29SEric Sandeen }
92*fe327b82SDarrick J. Wong # define xfs_rtmount_inodes(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (-ENOSYS))
93b93b6e43SChristoph Hellwig # define xfs_rtunmount_inodes(m)
941da177e4SLinus Torvalds #endif /* CONFIG_XFS_RT */
951da177e4SLinus Torvalds
961da177e4SLinus Torvalds #endif /* __XFS_RTALLOC_H__ */
97