2023-04-11 18:59:56 -07:00
// SPDX-License-Identifier: GPL-2.0-or-later
2018-07-29 22:37:09 -07:00
/*
2023-04-11 18:59:57 -07:00
* Copyright ( C ) 2018 - 2023 Oracle . All Rights Reserved .
2023-04-11 18:59:56 -07:00
* Author : Darrick J . Wong < djwong @ kernel . org >
2018-07-29 22:37:09 -07:00
*/
# ifndef __XFS_SCRUB_BITMAP_H__
# define __XFS_SCRUB_BITMAP_H__
2020-03-16 17:13:05 -07:00
struct xbitmap_range {
2018-07-29 22:37:09 -07:00
struct list_head list ;
2018-07-30 11:18:13 -07:00
uint64_t start ;
uint64_t len ;
2018-07-29 22:37:09 -07:00
} ;
2020-03-16 17:13:05 -07:00
struct xbitmap {
2018-07-29 22:37:09 -07:00
struct list_head list ;
} ;
2020-03-16 17:13:05 -07:00
void xbitmap_init ( struct xbitmap * bitmap ) ;
void xbitmap_destroy ( struct xbitmap * bitmap ) ;
2018-07-29 22:37:09 -07:00
2020-03-16 17:13:05 -07:00
int xbitmap_set ( struct xbitmap * bitmap , uint64_t start , uint64_t len ) ;
int xbitmap_disunion ( struct xbitmap * bitmap , struct xbitmap * sub ) ;
int xbitmap_set_btcur_path ( struct xbitmap * bitmap ,
2018-08-09 22:43:02 -07:00
struct xfs_btree_cur * cur ) ;
2020-03-16 17:13:05 -07:00
int xbitmap_set_btblocks ( struct xbitmap * bitmap ,
2018-08-09 22:43:02 -07:00
struct xfs_btree_cur * cur ) ;
2020-03-16 17:16:35 -07:00
uint64_t xbitmap_hweight ( struct xbitmap * bitmap ) ;
2018-07-29 22:37:09 -07:00
2023-04-11 19:00:35 -07:00
/*
* Return codes for the bitmap iterator functions are 0 to continue iterating ,
* and non - zero to stop iterating . Any non - zero value will be passed up to the
* iteration caller . The special value - ECANCELED can be used to stop
* iteration , because neither bitmap iterator ever generates that error code on
* its own . Callers must not modify the bitmap while walking it .
*/
typedef int ( * xbitmap_walk_fn ) ( uint64_t start , uint64_t len , void * priv ) ;
int xbitmap_walk ( struct xbitmap * bitmap , xbitmap_walk_fn fn ,
void * priv ) ;
typedef int ( * xbitmap_walk_bits_fn ) ( uint64_t bit , void * priv ) ;
int xbitmap_walk_bits ( struct xbitmap * bitmap , xbitmap_walk_bits_fn fn ,
void * priv ) ;
2018-07-29 22:37:09 -07:00
# endif /* __XFS_SCRUB_BITMAP_H__ */