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