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_extent_busy.h (1995B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
      4 * Copyright (c) 2010 David Chinner.
      5 * Copyright (c) 2011 Christoph Hellwig.
      6 * All Rights Reserved.
      7 */
      8#ifndef __XFS_EXTENT_BUSY_H__
      9#define	__XFS_EXTENT_BUSY_H__
     10
     11struct xfs_mount;
     12struct xfs_perag;
     13struct xfs_trans;
     14struct xfs_alloc_arg;
     15
     16/*
     17 * Busy block/extent entry.  Indexed by a rbtree in perag to mark blocks that
     18 * have been freed but whose transactions aren't committed to disk yet.
     19 *
     20 * Note that we use the transaction ID to record the transaction, not the
     21 * transaction structure itself. See xfs_extent_busy_insert() for details.
     22 */
     23struct xfs_extent_busy {
     24	struct rb_node	rb_node;	/* ag by-bno indexed search tree */
     25	struct list_head list;		/* transaction busy extent list */
     26	xfs_agnumber_t	agno;
     27	xfs_agblock_t	bno;
     28	xfs_extlen_t	length;
     29	unsigned int	flags;
     30#define XFS_EXTENT_BUSY_DISCARDED	0x01	/* undergoing a discard op. */
     31#define XFS_EXTENT_BUSY_SKIP_DISCARD	0x02	/* do not discard */
     32};
     33
     34void
     35xfs_extent_busy_insert(struct xfs_trans *tp, struct xfs_perag *pag,
     36	xfs_agblock_t bno, xfs_extlen_t len, unsigned int flags);
     37
     38void
     39xfs_extent_busy_clear(struct xfs_mount *mp, struct list_head *list,
     40	bool do_discard);
     41
     42int
     43xfs_extent_busy_search(struct xfs_mount *mp, struct xfs_perag *pag,
     44	xfs_agblock_t bno, xfs_extlen_t len);
     45
     46void
     47xfs_extent_busy_reuse(struct xfs_mount *mp, struct xfs_perag *pag,
     48	xfs_agblock_t fbno, xfs_extlen_t flen, bool userdata);
     49
     50bool
     51xfs_extent_busy_trim(struct xfs_alloc_arg *args, xfs_agblock_t *bno,
     52		xfs_extlen_t *len, unsigned *busy_gen);
     53
     54void
     55xfs_extent_busy_flush(struct xfs_mount *mp, struct xfs_perag *pag,
     56	unsigned busy_gen);
     57
     58void
     59xfs_extent_busy_wait_all(struct xfs_mount *mp);
     60
     61int
     62xfs_extent_busy_ag_cmp(void *priv, const struct list_head *a,
     63	const struct list_head *b);
     64
     65static inline void xfs_extent_busy_sort(struct list_head *list)
     66{
     67	list_sort(NULL, list, xfs_extent_busy_ag_cmp);
     68}
     69
     70#endif /* __XFS_EXTENT_BUSY_H__ */