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