xref: /openbmc/linux/fs/xfs/xfs_rtalloc.h (revision 1a6d63f2)
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