Linux Audio

Check our new training course

Loading...
v6.9.4
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Copyright (c) 2000,2005 Silicon Graphics, Inc.
  4 * All Rights Reserved.
  5 */
  6#ifndef __XFS_IALLOC_H__
  7#define	__XFS_IALLOC_H__
  8
  9struct xfs_buf;
 10struct xfs_dinode;
 11struct xfs_imap;
 12struct xfs_mount;
 13struct xfs_trans;
 14struct xfs_btree_cur;
 15struct xfs_perag;
 16
 17/* Move inodes in clusters of this size */
 18#define	XFS_INODE_BIG_CLUSTER_SIZE	8192
 19
 20struct xfs_icluster {
 21	bool		deleted;	/* record is deleted */
 22	xfs_ino_t	first_ino;	/* first inode number */
 23	uint64_t	alloc;		/* inode phys. allocation bitmap for
 24					 * sparse chunks */
 25};
 26
 27/*
 28 * Make an inode pointer out of the buffer/offset.
 29 */
 30static inline struct xfs_dinode *
 31xfs_make_iptr(struct xfs_mount *mp, struct xfs_buf *b, int o)
 32{
 33	return xfs_buf_offset(b, o << (mp)->m_sb.sb_inodelog);
 34}
 35
 36/*
 37 * Allocate an inode on disk.  Mode is used to tell whether the new inode will
 38 * need space, and whether it is a directory.
 39 */
 40int xfs_dialloc(struct xfs_trans **tpp, xfs_ino_t parent, umode_t mode,
 41		xfs_ino_t *new_ino);
 42
 43int xfs_difree(struct xfs_trans *tp, struct xfs_perag *pag,
 44		xfs_ino_t ino, struct xfs_icluster *ifree);
 45
 46/*
 47 * Return the location of the inode in imap, for mapping it into a buffer.
 48 */
 49int
 50xfs_imap(
 51	struct xfs_perag *pag,
 52	struct xfs_trans *tp,		/* transaction pointer */
 53	xfs_ino_t	ino,		/* inode to locate */
 54	struct xfs_imap	*imap,		/* location map structure */
 55	uint		flags);		/* flags for inode btree lookup */
 56
 57/*
 58 * Log specified fields for the ag hdr (inode section)
 59 */
 60void
 61xfs_ialloc_log_agi(
 62	struct xfs_trans *tp,		/* transaction pointer */
 63	struct xfs_buf	*bp,		/* allocation group header buffer */
 64	uint32_t	fields);	/* bitmask of fields to log */
 65
 66int xfs_read_agi(struct xfs_perag *pag, struct xfs_trans *tp,
 67		struct xfs_buf **agibpp);
 68int xfs_ialloc_read_agi(struct xfs_perag *pag, struct xfs_trans *tp,
 69		struct xfs_buf **agibpp);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 70
 71/*
 72 * Lookup a record by ino in the btree given by cur.
 73 */
 74int xfs_inobt_lookup(struct xfs_btree_cur *cur, xfs_agino_t ino,
 75		xfs_lookup_t dir, int *stat);
 76
 77/*
 78 * Get the data from the pointed-to record.
 79 */
 80int xfs_inobt_get_rec(struct xfs_btree_cur *cur,
 81		xfs_inobt_rec_incore_t *rec, int *stat);
 82uint8_t xfs_inobt_rec_freecount(const struct xfs_inobt_rec_incore *irec);
 83
 84/*
 85 * Inode chunk initialisation routine
 86 */
 87int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp,
 88			  struct list_head *buffer_list, int icount,
 89			  xfs_agnumber_t agno, xfs_agblock_t agbno,
 90			  xfs_agblock_t length, unsigned int gen);
 91
 
 
 92
 93union xfs_btree_rec;
 94void xfs_inobt_btrec_to_irec(struct xfs_mount *mp,
 95		const union xfs_btree_rec *rec,
 96		struct xfs_inobt_rec_incore *irec);
 97xfs_failaddr_t xfs_inobt_check_irec(struct xfs_perag *pag,
 98		const struct xfs_inobt_rec_incore *irec);
 99int xfs_ialloc_has_inodes_at_extent(struct xfs_btree_cur *cur,
100		xfs_agblock_t bno, xfs_extlen_t len,
101		enum xbtree_recpacking *outcome);
 
102int xfs_ialloc_count_inodes(struct xfs_btree_cur *cur, xfs_agino_t *count,
103		xfs_agino_t *freecount);
104int xfs_inobt_insert_rec(struct xfs_btree_cur *cur, uint16_t holemask,
105		uint8_t count, int32_t freecount, xfs_inofree_t free,
106		int *stat);
107
108int xfs_ialloc_cluster_alignment(struct xfs_mount *mp);
109void xfs_ialloc_setup_geometry(struct xfs_mount *mp);
110xfs_ino_t xfs_ialloc_calc_rootino(struct xfs_mount *mp, int sunit);
111
112int xfs_ialloc_check_shrink(struct xfs_perag *pag, struct xfs_trans *tp,
113		struct xfs_buf *agibp, xfs_agblock_t new_length);
114
115#endif	/* __XFS_IALLOC_H__ */
v5.14.15
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Copyright (c) 2000,2005 Silicon Graphics, Inc.
  4 * All Rights Reserved.
  5 */
  6#ifndef __XFS_IALLOC_H__
  7#define	__XFS_IALLOC_H__
  8
  9struct xfs_buf;
 10struct xfs_dinode;
 11struct xfs_imap;
 12struct xfs_mount;
 13struct xfs_trans;
 14struct xfs_btree_cur;
 
 15
 16/* Move inodes in clusters of this size */
 17#define	XFS_INODE_BIG_CLUSTER_SIZE	8192
 18
 19struct xfs_icluster {
 20	bool		deleted;	/* record is deleted */
 21	xfs_ino_t	first_ino;	/* first inode number */
 22	uint64_t	alloc;		/* inode phys. allocation bitmap for
 23					 * sparse chunks */
 24};
 25
 26/*
 27 * Make an inode pointer out of the buffer/offset.
 28 */
 29static inline struct xfs_dinode *
 30xfs_make_iptr(struct xfs_mount *mp, struct xfs_buf *b, int o)
 31{
 32	return xfs_buf_offset(b, o << (mp)->m_sb.sb_inodelog);
 33}
 34
 35/*
 36 * Allocate an inode on disk.  Mode is used to tell whether the new inode will
 37 * need space, and whether it is a directory.
 38 */
 39int xfs_dialloc(struct xfs_trans **tpp, xfs_ino_t parent, umode_t mode,
 40		xfs_ino_t *new_ino);
 41
 42int xfs_difree(struct xfs_trans *tp, struct xfs_perag *pag,
 43		xfs_ino_t ino, struct xfs_icluster *ifree);
 44
 45/*
 46 * Return the location of the inode in imap, for mapping it into a buffer.
 47 */
 48int
 49xfs_imap(
 50	struct xfs_mount *mp,		/* file system mount structure */
 51	struct xfs_trans *tp,		/* transaction pointer */
 52	xfs_ino_t	ino,		/* inode to locate */
 53	struct xfs_imap	*imap,		/* location map structure */
 54	uint		flags);		/* flags for inode btree lookup */
 55
 56/*
 57 * Log specified fields for the ag hdr (inode section)
 58 */
 59void
 60xfs_ialloc_log_agi(
 61	struct xfs_trans *tp,		/* transaction pointer */
 62	struct xfs_buf	*bp,		/* allocation group header buffer */
 63	int		fields);	/* bitmask of fields to log */
 64
 65/*
 66 * Read in the allocation group header (inode allocation section)
 67 */
 68int					/* error */
 69xfs_ialloc_read_agi(
 70	struct xfs_mount *mp,		/* file system mount structure */
 71	struct xfs_trans *tp,		/* transaction pointer */
 72	xfs_agnumber_t	agno,		/* allocation group number */
 73	struct xfs_buf	**bpp);		/* allocation group hdr buf */
 74
 75/*
 76 * Read in the allocation group header to initialise the per-ag data
 77 * in the mount structure
 78 */
 79int
 80xfs_ialloc_pagi_init(
 81	struct xfs_mount *mp,		/* file system mount structure */
 82	struct xfs_trans *tp,		/* transaction pointer */
 83        xfs_agnumber_t  agno);		/* allocation group number */
 84
 85/*
 86 * Lookup a record by ino in the btree given by cur.
 87 */
 88int xfs_inobt_lookup(struct xfs_btree_cur *cur, xfs_agino_t ino,
 89		xfs_lookup_t dir, int *stat);
 90
 91/*
 92 * Get the data from the pointed-to record.
 93 */
 94int xfs_inobt_get_rec(struct xfs_btree_cur *cur,
 95		xfs_inobt_rec_incore_t *rec, int *stat);
 
 96
 97/*
 98 * Inode chunk initialisation routine
 99 */
100int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp,
101			  struct list_head *buffer_list, int icount,
102			  xfs_agnumber_t agno, xfs_agblock_t agbno,
103			  xfs_agblock_t length, unsigned int gen);
104
105int xfs_read_agi(struct xfs_mount *mp, struct xfs_trans *tp,
106		xfs_agnumber_t agno, struct xfs_buf **bpp);
107
108union xfs_btree_rec;
109void xfs_inobt_btrec_to_irec(struct xfs_mount *mp, union xfs_btree_rec *rec,
 
110		struct xfs_inobt_rec_incore *irec);
 
 
111int xfs_ialloc_has_inodes_at_extent(struct xfs_btree_cur *cur,
112		xfs_agblock_t bno, xfs_extlen_t len, bool *exists);
113int xfs_ialloc_has_inode_record(struct xfs_btree_cur *cur, xfs_agino_t low,
114		xfs_agino_t high, bool *exists);
115int xfs_ialloc_count_inodes(struct xfs_btree_cur *cur, xfs_agino_t *count,
116		xfs_agino_t *freecount);
117int xfs_inobt_insert_rec(struct xfs_btree_cur *cur, uint16_t holemask,
118		uint8_t count, int32_t freecount, xfs_inofree_t free,
119		int *stat);
120
121int xfs_ialloc_cluster_alignment(struct xfs_mount *mp);
122void xfs_ialloc_setup_geometry(struct xfs_mount *mp);
123xfs_ino_t xfs_ialloc_calc_rootino(struct xfs_mount *mp, int sunit);
124
125int xfs_ialloc_check_shrink(struct xfs_trans *tp, xfs_agnumber_t agno,
126		struct xfs_buf *agibp, xfs_agblock_t new_length);
127
128#endif	/* __XFS_IALLOC_H__ */