xref: /linux/fs/ntfs/bitmap.h (revision cdd4dc3aebeab43a72ce0bc2b5bab6f0a80b97a5)
11e9ea7e0SNamjae Jeon /* SPDX-License-Identifier: GPL-2.0-or-later */
21e9ea7e0SNamjae Jeon /*
3*40796051SNamjae Jeon  * Defines for NTFS kernel bitmap handling.
41e9ea7e0SNamjae Jeon  *
51e9ea7e0SNamjae Jeon  * Copyright (c) 2004 Anton Altaparmakov
61e9ea7e0SNamjae Jeon  */
71e9ea7e0SNamjae Jeon 
81e9ea7e0SNamjae Jeon #ifndef _LINUX_NTFS_BITMAP_H
91e9ea7e0SNamjae Jeon #define _LINUX_NTFS_BITMAP_H
101e9ea7e0SNamjae Jeon 
111e9ea7e0SNamjae Jeon #include <linux/fs.h>
121e9ea7e0SNamjae Jeon 
13*40796051SNamjae Jeon #include "volume.h"
141e9ea7e0SNamjae Jeon 
15*40796051SNamjae Jeon int ntfs_trim_fs(struct ntfs_volume *vol, struct fstrim_range *range);
16*40796051SNamjae Jeon int __ntfs_bitmap_set_bits_in_run(struct inode *vi, const s64 start_bit,
171e9ea7e0SNamjae Jeon 		const s64 count, const u8 value, const bool is_rollback);
181e9ea7e0SNamjae Jeon 
19*40796051SNamjae Jeon /*
201e9ea7e0SNamjae Jeon  * ntfs_bitmap_set_bits_in_run - set a run of bits in a bitmap to a value
211e9ea7e0SNamjae Jeon  * @vi:			vfs inode describing the bitmap
221e9ea7e0SNamjae Jeon  * @start_bit:		first bit to set
231e9ea7e0SNamjae Jeon  * @count:		number of bits to set
241e9ea7e0SNamjae Jeon  * @value:		value to set the bits to (i.e. 0 or 1)
251e9ea7e0SNamjae Jeon  *
261e9ea7e0SNamjae Jeon  * Set @count bits starting at bit @start_bit in the bitmap described by the
271e9ea7e0SNamjae Jeon  * vfs inode @vi to @value, where @value is either 0 or 1.
281e9ea7e0SNamjae Jeon  *
291e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
301e9ea7e0SNamjae Jeon  */
311e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_set_bits_in_run(struct inode *vi,
321e9ea7e0SNamjae Jeon 		const s64 start_bit, const s64 count, const u8 value)
331e9ea7e0SNamjae Jeon {
341e9ea7e0SNamjae Jeon 	return __ntfs_bitmap_set_bits_in_run(vi, start_bit, count, value,
351e9ea7e0SNamjae Jeon 			false);
361e9ea7e0SNamjae Jeon }
371e9ea7e0SNamjae Jeon 
38*40796051SNamjae Jeon /*
391e9ea7e0SNamjae Jeon  * ntfs_bitmap_set_run - set a run of bits in a bitmap
401e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
411e9ea7e0SNamjae Jeon  * @start_bit:	first bit to set
421e9ea7e0SNamjae Jeon  * @count:	number of bits to set
431e9ea7e0SNamjae Jeon  *
441e9ea7e0SNamjae Jeon  * Set @count bits starting at bit @start_bit in the bitmap described by the
451e9ea7e0SNamjae Jeon  * vfs inode @vi.
461e9ea7e0SNamjae Jeon  *
471e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
481e9ea7e0SNamjae Jeon  */
491e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_set_run(struct inode *vi, const s64 start_bit,
501e9ea7e0SNamjae Jeon 		const s64 count)
511e9ea7e0SNamjae Jeon {
521e9ea7e0SNamjae Jeon 	return ntfs_bitmap_set_bits_in_run(vi, start_bit, count, 1);
531e9ea7e0SNamjae Jeon }
541e9ea7e0SNamjae Jeon 
55*40796051SNamjae Jeon /*
561e9ea7e0SNamjae Jeon  * ntfs_bitmap_clear_run - clear a run of bits in a bitmap
571e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
581e9ea7e0SNamjae Jeon  * @start_bit:	first bit to clear
591e9ea7e0SNamjae Jeon  * @count:	number of bits to clear
601e9ea7e0SNamjae Jeon  *
611e9ea7e0SNamjae Jeon  * Clear @count bits starting at bit @start_bit in the bitmap described by the
621e9ea7e0SNamjae Jeon  * vfs inode @vi.
631e9ea7e0SNamjae Jeon  *
641e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
651e9ea7e0SNamjae Jeon  */
661e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_clear_run(struct inode *vi, const s64 start_bit,
671e9ea7e0SNamjae Jeon 		const s64 count)
681e9ea7e0SNamjae Jeon {
691e9ea7e0SNamjae Jeon 	return ntfs_bitmap_set_bits_in_run(vi, start_bit, count, 0);
701e9ea7e0SNamjae Jeon }
711e9ea7e0SNamjae Jeon 
72*40796051SNamjae Jeon /*
731e9ea7e0SNamjae Jeon  * ntfs_bitmap_set_bit - set a bit in a bitmap
741e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
751e9ea7e0SNamjae Jeon  * @bit:	bit to set
761e9ea7e0SNamjae Jeon  *
771e9ea7e0SNamjae Jeon  * Set bit @bit in the bitmap described by the vfs inode @vi.
781e9ea7e0SNamjae Jeon  *
791e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
801e9ea7e0SNamjae Jeon  */
811e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_set_bit(struct inode *vi, const s64 bit)
821e9ea7e0SNamjae Jeon {
831e9ea7e0SNamjae Jeon 	return ntfs_bitmap_set_run(vi, bit, 1);
841e9ea7e0SNamjae Jeon }
851e9ea7e0SNamjae Jeon 
86*40796051SNamjae Jeon /*
871e9ea7e0SNamjae Jeon  * ntfs_bitmap_clear_bit - clear a bit in a bitmap
881e9ea7e0SNamjae Jeon  * @vi:		vfs inode describing the bitmap
891e9ea7e0SNamjae Jeon  * @bit:	bit to clear
901e9ea7e0SNamjae Jeon  *
911e9ea7e0SNamjae Jeon  * Clear bit @bit in the bitmap described by the vfs inode @vi.
921e9ea7e0SNamjae Jeon  *
931e9ea7e0SNamjae Jeon  * Return 0 on success and -errno on error.
941e9ea7e0SNamjae Jeon  */
951e9ea7e0SNamjae Jeon static inline int ntfs_bitmap_clear_bit(struct inode *vi, const s64 bit)
961e9ea7e0SNamjae Jeon {
971e9ea7e0SNamjae Jeon 	return ntfs_bitmap_clear_run(vi, bit, 1);
981e9ea7e0SNamjae Jeon }
991e9ea7e0SNamjae Jeon 
1001e9ea7e0SNamjae Jeon #endif /* defined _LINUX_NTFS_BITMAP_H */
101