cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xfs_ialloc.h (3949B)


      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	uint32_t	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,
    110		const union xfs_btree_rec *rec,
    111		struct xfs_inobt_rec_incore *irec);
    112int xfs_ialloc_has_inodes_at_extent(struct xfs_btree_cur *cur,
    113		xfs_agblock_t bno, xfs_extlen_t len, bool *exists);
    114int xfs_ialloc_has_inode_record(struct xfs_btree_cur *cur, xfs_agino_t low,
    115		xfs_agino_t high, bool *exists);
    116int xfs_ialloc_count_inodes(struct xfs_btree_cur *cur, xfs_agino_t *count,
    117		xfs_agino_t *freecount);
    118int xfs_inobt_insert_rec(struct xfs_btree_cur *cur, uint16_t holemask,
    119		uint8_t count, int32_t freecount, xfs_inofree_t free,
    120		int *stat);
    121
    122int xfs_ialloc_cluster_alignment(struct xfs_mount *mp);
    123void xfs_ialloc_setup_geometry(struct xfs_mount *mp);
    124xfs_ino_t xfs_ialloc_calc_rootino(struct xfs_mount *mp, int sunit);
    125
    126int xfs_ialloc_check_shrink(struct xfs_trans *tp, xfs_agnumber_t agno,
    127		struct xfs_buf *agibp, xfs_agblock_t new_length);
    128
    129#endif	/* __XFS_IALLOC_H__ */