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