xref: /linux/fs/ntfs/bitmap.h (revision 1e9ea7e04472d4e5e12e58c881eaacfb3e49b669)
1*1e9ea7e0SNamjae Jeon /* SPDX-License-Identifier: GPL-2.0-or-later */
2*1e9ea7e0SNamjae Jeon /*
3*1e9ea7e0SNamjae Jeon  * bitmap.h - Defines for NTFS kernel bitmap handling.  Part of the Linux-NTFS
4*1e9ea7e0SNamjae Jeon  *	      project.
5*1e9ea7e0SNamjae Jeon  *
6*1e9ea7e0SNamjae Jeon  * Copyright (c) 2004 Anton Altaparmakov
7*1e9ea7e0SNamjae Jeon  */
8*1e9ea7e0SNamjae Jeon 
9*1e9ea7e0SNamjae Jeon #ifndef _LINUX_NTFS_BITMAP_H
10*1e9ea7e0SNamjae Jeon #define _LINUX_NTFS_BITMAP_H
11*1e9ea7e0SNamjae Jeon 
12*1e9ea7e0SNamjae Jeon #ifdef NTFS_RW
13*1e9ea7e0SNamjae Jeon 
14*1e9ea7e0SNamjae Jeon #include <linux/fs.h>
15*1e9ea7e0SNamjae Jeon 
16*1e9ea7e0SNamjae Jeon #include "types.h"
17*1e9ea7e0SNamjae Jeon 
18*1e9ea7e0SNamjae Jeon extern int __ntfs_bitmap_set_bits_in_run(struct inode *vi, const s64 start_bit,
19*1e9ea7e0SNamjae Jeon 		const s64 count, const u8 value, const bool is_rollback);
20*1e9ea7e0SNamjae Jeon 
21*1e9ea7e0SNamjae Jeon /**
22*1e9ea7e0SNamjae Jeon  * ntfs_bitmap_set_bits_in_run - set a run of bits in a bitmap to a value
23*1e9ea7e0SNamjae Jeon  * @vi:			vfs inode describing the bitmap
24*1e9ea7e0SNamjae Jeon  * @start_bit:		first bit to set
25*1e9ea7e0SNamjae Jeon  * @count:		number of bits to set
26*1e9ea7e0SNamjae Jeon  * @value:		value to set the bits to (i.e. 0 or 1)
27*1e9ea7e0SNamjae Jeon  *
28*1e9ea7e0SNamjae Jeon  * Set @count bits starting at bit @start_bit in the bitmap described by the
29*1e9ea7e0SNamjae Jeon  * vfs inode @vi to @value, where @value is either 0 or 1.
30*1e9ea7e0SNamjae Jeon  *
31*1e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
32*1e9ea7e0SNamjae Jeon  */
33*1e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_set_bits_in_run(struct inode *vi,
34*1e9ea7e0SNamjae Jeon 		const s64 start_bit, const s64 count, const u8 value)
35*1e9ea7e0SNamjae Jeon {
36*1e9ea7e0SNamjae Jeon 	return __ntfs_bitmap_set_bits_in_run(vi, start_bit, count, value,
37*1e9ea7e0SNamjae Jeon 			false);
38*1e9ea7e0SNamjae Jeon }
39*1e9ea7e0SNamjae Jeon 
40*1e9ea7e0SNamjae Jeon /**
41*1e9ea7e0SNamjae Jeon  * ntfs_bitmap_set_run - set a run of bits in a bitmap
42*1e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
43*1e9ea7e0SNamjae Jeon  * @start_bit:	first bit to set
44*1e9ea7e0SNamjae Jeon  * @count:	number of bits to set
45*1e9ea7e0SNamjae Jeon  *
46*1e9ea7e0SNamjae Jeon  * Set @count bits starting at bit @start_bit in the bitmap described by the
47*1e9ea7e0SNamjae Jeon  * vfs inode @vi.
48*1e9ea7e0SNamjae Jeon  *
49*1e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
50*1e9ea7e0SNamjae Jeon  */
51*1e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_set_run(struct inode *vi, const s64 start_bit,
52*1e9ea7e0SNamjae Jeon 		const s64 count)
53*1e9ea7e0SNamjae Jeon {
54*1e9ea7e0SNamjae Jeon 	return ntfs_bitmap_set_bits_in_run(vi, start_bit, count, 1);
55*1e9ea7e0SNamjae Jeon }
56*1e9ea7e0SNamjae Jeon 
57*1e9ea7e0SNamjae Jeon /**
58*1e9ea7e0SNamjae Jeon  * ntfs_bitmap_clear_run - clear a run of bits in a bitmap
59*1e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
60*1e9ea7e0SNamjae Jeon  * @start_bit:	first bit to clear
61*1e9ea7e0SNamjae Jeon  * @count:	number of bits to clear
62*1e9ea7e0SNamjae Jeon  *
63*1e9ea7e0SNamjae Jeon  * Clear @count bits starting at bit @start_bit in the bitmap described by the
64*1e9ea7e0SNamjae Jeon  * vfs inode @vi.
65*1e9ea7e0SNamjae Jeon  *
66*1e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
67*1e9ea7e0SNamjae Jeon  */
68*1e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_clear_run(struct inode *vi, const s64 start_bit,
69*1e9ea7e0SNamjae Jeon 		const s64 count)
70*1e9ea7e0SNamjae Jeon {
71*1e9ea7e0SNamjae Jeon 	return ntfs_bitmap_set_bits_in_run(vi, start_bit, count, 0);
72*1e9ea7e0SNamjae Jeon }
73*1e9ea7e0SNamjae Jeon 
74*1e9ea7e0SNamjae Jeon /**
75*1e9ea7e0SNamjae Jeon  * ntfs_bitmap_set_bit - set a bit in a bitmap
76*1e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
77*1e9ea7e0SNamjae Jeon  * @bit:	bit to set
78*1e9ea7e0SNamjae Jeon  *
79*1e9ea7e0SNamjae Jeon  * Set bit @bit in the bitmap described by the vfs inode @vi.
80*1e9ea7e0SNamjae Jeon  *
81*1e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
82*1e9ea7e0SNamjae Jeon  */
83*1e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_set_bit(struct inode *vi, const s64 bit)
84*1e9ea7e0SNamjae Jeon {
85*1e9ea7e0SNamjae Jeon 	return ntfs_bitmap_set_run(vi, bit, 1);
86*1e9ea7e0SNamjae Jeon }
87*1e9ea7e0SNamjae Jeon 
88*1e9ea7e0SNamjae Jeon /**
89*1e9ea7e0SNamjae Jeon  * ntfs_bitmap_clear_bit - clear a bit in a bitmap
90*1e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
91*1e9ea7e0SNamjae Jeon  * @bit:	bit to clear
92*1e9ea7e0SNamjae Jeon  *
93*1e9ea7e0SNamjae Jeon  * Clear bit @bit in the bitmap described by the vfs inode @vi.
94*1e9ea7e0SNamjae Jeon  *
95*1e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
96*1e9ea7e0SNamjae Jeon  */
97*1e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_clear_bit(struct inode *vi, const s64 bit)
98*1e9ea7e0SNamjae Jeon {
99*1e9ea7e0SNamjae Jeon 	return ntfs_bitmap_clear_run(vi, bit, 1);
100*1e9ea7e0SNamjae Jeon }
101*1e9ea7e0SNamjae Jeon 
102*1e9ea7e0SNamjae Jeon #endif /* NTFS_RW */
103*1e9ea7e0SNamjae Jeon 
104*1e9ea7e0SNamjae Jeon #endif /* defined _LINUX_NTFS_BITMAP_H */
105