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
# define for_each_xbitmap_extent(bex, n, bitmap) \
2018-07-30 11:18:13 -07:00
list_for_each_entry_safe ( ( bex ) , ( n ) , & ( bitmap ) - > list , list )
2020-03-16 17:13:05 -07:00
# define for_each_xbitmap_block(b, bex, n, bitmap) \
2018-07-30 11:18:13 -07:00
list_for_each_entry_safe ( ( bex ) , ( n ) , & ( bitmap ) - > list , list ) \
2020-03-16 17:13:05 -07:00
for ( ( b ) = ( bex ) - > start ; ( b ) < ( bex ) - > start + ( bex ) - > len ; ( b ) + + )
2018-07-30 11:18:13 -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
# endif /* __XFS_SCRUB_BITMAP_H__ */