errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bmap, __u64 start, unsigned int num, void *out) { if (!bmap) return EINVAL; if (EXT2FS_IS_32_BITMAP(bmap)) { if ((start+num-1) & ~0xffffffffULL) { ext2fs_warn_bitmap2(bmap, EXT2FS_UNMARK_ERROR, 0xffffffff); return EINVAL; } return ext2fs_get_generic_bitmap_range(bmap, bmap->magic, start, num, out); } if (!EXT2FS_IS_64_BITMAP(bmap)) return EINVAL; return bmap->bitmap_ops->get_bmap_range(bmap, start, num, out); }
void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap, blk64_t block, unsigned int num) { __u64 end = block + num; if (!bmap) return; if (EXT2FS_IS_32_BITMAP(bmap)) { if ((block+num-1) & ~0xffffffffULL) { ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap, EXT2FS_UNMARK_ERROR, 0xffffffff); return; } ext2fs_unmark_block_bitmap_range((ext2fs_generic_bitmap) bmap, block, num); } if (!EXT2FS_IS_64_BITMAP(bmap)) return; INC_STAT(bmap, unmark_ext_count); /* convert to clusters if necessary */ block >>= bmap->cluster_bits; end += (1 << bmap->cluster_bits) - 1; end >>= bmap->cluster_bits; num = end - block; if ((block < bmap->start) || (block+num-1 > bmap->end)) { ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block, bmap->description); return; } bmap->bitmap_ops->unmark_bmap_extent(bmap, block, num); }
int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) { if (!bitmap) return 0; if (EXT2FS_IS_32_BITMAP(bitmap)) { if (arg & ~0xffffffffULL) { ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, 0xffffffff); return 0; } return ext2fs_test_generic_bitmap(bitmap, arg); } if (!EXT2FS_IS_64_BITMAP(bitmap)) return 0; arg >>= bitmap->cluster_bits; #ifdef BMAP_STATS_OPS bitmap->stats.test_count++; if (arg == bitmap->stats.last_tested + 1) bitmap->stats.test_seq++; if (arg < bitmap->stats.last_tested) bitmap->stats.test_back++; bitmap->stats.last_tested = arg; #endif if ((arg < bitmap->start) || (arg > bitmap->end)) { warn_bitmap(bitmap, EXT2FS_TEST_ERROR, arg); return 0; } return bitmap->bitmap_ops->test_bmap(bitmap, arg); }