Lines Matching +full:rcu +full:- +full:endian +full:- +full:offset

1 // SPDX-License-Identifier: GPL-2.0
7 * Laboratoire MASI - Institut Blaise Pascal
11 * Big-endian to little-endian byte-swapping/bitmaps by
41 group = (block - in ext4_get_group_number()
42 le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block)) >> in ext4_get_group_number()
50 * Calculate the block group number and offset into the block/cluster
56 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_get_group_no_and_offset()
57 ext4_grpblk_t offset; in ext4_get_group_no_and_offset() local
59 blocknr = blocknr - le32_to_cpu(es->s_first_data_block); in ext4_get_group_no_and_offset()
60 offset = do_div(blocknr, EXT4_BLOCKS_PER_GROUP(sb)) >> in ext4_get_group_no_and_offset()
61 EXT4_SB(sb)->s_cluster_bits; in ext4_get_group_no_and_offset()
63 *offsetp = offset; in ext4_get_group_no_and_offset()
92 int block_cluster = -1, inode_cluster; in ext4_num_overhead_clusters()
93 int itbl_cluster_start = -1, itbl_cluster_end = -1; in ext4_num_overhead_clusters()
95 ext4_fsblk_t end = start + EXT4_BLOCKS_PER_GROUP(sb) - 1; in ext4_num_overhead_clusters()
108 * [-1, -1] and won't overlap with block/inode bitmap cluster in ext4_num_overhead_clusters()
112 itbl_blk_end = itbl_blk_start + sbi->s_itb_per_group - 1; in ext4_num_overhead_clusters()
119 itbl_cluster_start = EXT4_B2C(sbi, itbl_blk_start - start); in ext4_num_overhead_clusters()
120 itbl_cluster_end = EXT4_B2C(sbi, itbl_blk_end - start); in ext4_num_overhead_clusters()
122 num_clusters += itbl_cluster_end - itbl_cluster_start + 1; in ext4_num_overhead_clusters()
124 if (itbl_cluster_start == base_clusters - 1) in ext4_num_overhead_clusters()
125 num_clusters--; in ext4_num_overhead_clusters()
139 ext4_block_bitmap(sb, gdp) - start); in ext4_num_overhead_clusters()
148 ext4_inode_bitmap(sb, gdp) - start); in ext4_num_overhead_clusters()
168 if (block_group == ext4_get_groups_count(sb) - 1) { in num_clusters_in_group()
175 blocks = ext4_blocks_count(EXT4_SB(sb)->s_es) - in num_clusters_in_group()
198 return -EFSBADCRC; in ext4_init_block_bitmap()
200 memset(bh->b_data, 0, sb->s_blocksize); in ext4_init_block_bitmap()
203 if ((bit_max >> 3) >= bh->b_size) in ext4_init_block_bitmap()
204 return -EFSCORRUPTED; in ext4_init_block_bitmap()
207 ext4_set_bit(bit, bh->b_data); in ext4_init_block_bitmap()
214 ext4_set_bit(EXT4_B2C(sbi, tmp - start), bh->b_data); in ext4_init_block_bitmap()
218 ext4_set_bit(EXT4_B2C(sbi, tmp - start), bh->b_data); in ext4_init_block_bitmap()
222 sbi->s_itb_per_group; tmp++) { in ext4_init_block_bitmap()
224 ext4_set_bit(EXT4_B2C(sbi, tmp - start), bh->b_data); in ext4_init_block_bitmap()
233 sb->s_blocksize * 8, bh->b_data); in ext4_init_block_bitmap()
244 return num_clusters_in_group(sb, block_group) - in ext4_free_clusters_after_init()
260 * ext4_get_group_desc() -- load group descriptor from disk
271 unsigned int offset; in ext4_get_group_desc() local
278 ext4_error(sb, "block_group >= groups_count - block_group = %u," in ext4_get_group_desc()
285 offset = block_group & (EXT4_DESC_PER_BLOCK(sb) - 1); in ext4_get_group_desc()
288 * sbi_array_rcu_deref returns with rcu unlocked, this is ok since in ext4_get_group_desc()
294 ext4_error(sb, "Group descriptor not loaded - " in ext4_get_group_desc()
296 block_group, group_desc, offset); in ext4_get_group_desc()
301 (__u8 *)bh_p->b_data + in ext4_get_group_desc()
302 offset * EXT4_DESC_SIZE(sb)); in ext4_get_group_desc()
313 unsigned long bitmap_size = sb->s_blocksize * 8; in ext4_valid_block_bitmap_padding()
314 unsigned int offset = num_clusters_in_group(sb, block_group); in ext4_valid_block_bitmap_padding() local
316 if (bitmap_size <= offset) in ext4_valid_block_bitmap_padding()
319 next_zero_bit = ext4_find_next_zero_bit(bh->b_data, bitmap_size, offset); in ext4_valid_block_bitmap_padding()
330 if (unlikely(group >= EXT4_SB(sb)->s_groups_count)) in ext4_get_group_info()
333 indexh = group & ((EXT4_DESC_PER_BLOCK(sb)) - 1); in ext4_get_group_info()
348 ext4_grpblk_t offset; in ext4_valid_block_bitmap() local
367 offset = blk - group_first_block; in ext4_valid_block_bitmap()
368 if (offset < 0 || EXT4_B2C(sbi, offset) >= max_bit || in ext4_valid_block_bitmap()
369 !ext4_test_bit(EXT4_B2C(sbi, offset), bh->b_data)) in ext4_valid_block_bitmap()
375 offset = blk - group_first_block; in ext4_valid_block_bitmap()
376 if (offset < 0 || EXT4_B2C(sbi, offset) >= max_bit || in ext4_valid_block_bitmap()
377 !ext4_test_bit(EXT4_B2C(sbi, offset), bh->b_data)) in ext4_valid_block_bitmap()
383 offset = blk - group_first_block; in ext4_valid_block_bitmap()
384 if (offset < 0 || EXT4_B2C(sbi, offset) >= max_bit || in ext4_valid_block_bitmap()
385 EXT4_B2C(sbi, offset + sbi->s_itb_per_group - 1) >= max_bit) in ext4_valid_block_bitmap()
387 next_zero_bit = ext4_find_next_zero_bit(bh->b_data, in ext4_valid_block_bitmap()
388 EXT4_B2C(sbi, offset + sbi->s_itb_per_group - 1) + 1, in ext4_valid_block_bitmap()
389 EXT4_B2C(sbi, offset)); in ext4_valid_block_bitmap()
391 EXT4_B2C(sbi, offset + sbi->s_itb_per_group - 1) + 1) in ext4_valid_block_bitmap()
405 if (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY) in ext4_validate_block_bitmap()
413 return -EFSCORRUPTED; in ext4_validate_block_bitmap()
424 return -EFSBADCRC; in ext4_validate_block_bitmap()
433 return -EFSCORRUPTED; in ext4_validate_block_bitmap()
442 return -EFSCORRUPTED; in ext4_validate_block_bitmap()
473 return ERR_PTR(-EFSCORRUPTED); in ext4_read_block_bitmap_nowait()
475 if ((bitmap_blk <= le32_to_cpu(sbi->s_es->s_first_data_block)) || in ext4_read_block_bitmap_nowait()
476 (bitmap_blk >= ext4_blocks_count(sbi->s_es))) { in ext4_read_block_bitmap_nowait()
481 return ERR_PTR(-EFSCORRUPTED); in ext4_read_block_bitmap_nowait()
485 ext4_warning(sb, "Cannot get buffer for block bitmap - " in ext4_read_block_bitmap_nowait()
488 return ERR_PTR(-ENOMEM); in ext4_read_block_bitmap_nowait()
507 (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) { in ext4_read_block_bitmap_nowait()
513 err = -EFSCORRUPTED; in ext4_read_block_bitmap_nowait()
561 /* Returns 0 on success, -errno on error */
571 return -EFSCORRUPTED; in ext4_wait_block_bitmap()
574 ext4_error_err(sb, EIO, "Cannot read block bitmap - " in ext4_wait_block_bitmap()
576 block_group, (unsigned long long) bh->b_blocknr); in ext4_wait_block_bitmap()
579 return -EIO; in ext4_wait_block_bitmap()
582 /* Panic or remount fs read-only if block bitmap is invalid */ in ext4_wait_block_bitmap()
605 * @sbi: in-core super block structure.
616 struct percpu_counter *fcc = &sbi->s_freeclusters_counter; in ext4_has_free_clusters()
617 struct percpu_counter *dcc = &sbi->s_dirtyclusters_counter; in ext4_has_free_clusters()
621 resv_clusters = atomic64_read(&sbi->s_resv_clusters); in ext4_has_free_clusters()
627 rsv = (ext4_r_blocks_count(sbi->s_es) >> sbi->s_cluster_bits) + in ext4_has_free_clusters()
630 if (free_clusters - (nclusters + rsv + dirty_clusters) < in ext4_has_free_clusters()
642 if (uid_eq(sbi->s_resuid, current_fsuid()) || in ext4_has_free_clusters()
643 (!gid_eq(sbi->s_resgid, GLOBAL_ROOT_GID) && in_group_p(sbi->s_resgid)) || in ext4_has_free_clusters()
664 percpu_counter_add(&sbi->s_dirtyclusters_counter, nclusters); in ext4_claim_free_clusters()
667 return -ENOSPC; in ext4_claim_free_clusters()
671 * ext4_should_retry_alloc() - check if a block allocation should be retried
685 if (!sbi->s_journal) in ext4_should_retry_alloc()
689 percpu_counter_inc(&sbi->s_sra_exceeded_retry_limit); in ext4_should_retry_alloc()
698 if (sbi->s_mb_free_pending == 0) { in ext4_should_retry_alloc()
700 atomic_inc(&sbi->s_retry_alloc_pending); in ext4_should_retry_alloc()
701 flush_work(&sbi->s_discard_work); in ext4_should_retry_alloc()
702 atomic_dec(&sbi->s_retry_alloc_pending); in ext4_should_retry_alloc()
711 ext4_debug("%s: retrying operation after ENOSPC\n", sb->s_id); in ext4_should_retry_alloc()
712 (void) jbd2_journal_force_commit_nested(sbi->s_journal); in ext4_should_retry_alloc()
717 * ext4_new_meta_blocks() -- allocate block for meta data (indexing) blocks
751 EXT4_C2B(EXT4_SB(inode->i_sb), ar.len)); in ext4_new_meta_blocks()
757 * ext4_count_free_clusters() -- count filesystem free clusters
775 es = EXT4_SB(sb)->s_es; in ext4_count_free_clusters()
785 if (EXT4_SB(sb)->s_group_info) in ext4_count_free_clusters()
796 x = ext4_count_free(bitmap_bh->b_data, in ext4_count_free_clusters()
815 if (EXT4_SB(sb)->s_group_info) in ext4_count_free_clusters()
839 * ext4_bg_has_super - number of blocks used by the superblock in group
848 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_bg_has_super()
853 if (group == le32_to_cpu(es->s_backup_bgs[0]) || in ext4_bg_has_super()
854 group == le32_to_cpu(es->s_backup_bgs[1])) in ext4_bg_has_super()
874 ext4_group_t last = first + EXT4_DESC_PER_BLOCK(sb) - 1; in ext4_bg_num_gdb_meta()
888 return le32_to_cpu(EXT4_SB(sb)->s_es->s_first_meta_bg); in ext4_bg_num_gdb_nometa()
890 return EXT4_SB(sb)->s_gdb_count; in ext4_bg_num_gdb_nometa()
894 * ext4_bg_num_gdb - number of blocks used by the group table in group
905 le32_to_cpu(EXT4_SB(sb)->s_es->s_first_meta_bg); in ext4_bg_num_gdb()
929 block_group < le32_to_cpu(sbi->s_es->s_first_meta_bg) * in ext4_num_base_meta_blocks()
930 sbi->s_desc_per_block) { in ext4_num_base_meta_blocks()
933 num += le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks); in ext4_num_base_meta_blocks()
948 * ext4_inode_to_goal_block - return a hint for block allocation
959 int flex_size = ext4_flex_bg_size(EXT4_SB(inode->i_sb)); in ext4_inode_to_goal_block()
963 block_group = ei->i_block_group; in ext4_inode_to_goal_block()
973 block_group &= ~(flex_size-1); in ext4_inode_to_goal_block()
974 if (S_ISREG(inode->i_mode)) in ext4_inode_to_goal_block()
977 bg_start = ext4_group_first_block_no(inode->i_sb, block_group); in ext4_inode_to_goal_block()
978 last_block = ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es) - 1; in ext4_inode_to_goal_block()
984 if (test_opt(inode->i_sb, DELALLOC)) in ext4_inode_to_goal_block()
987 if (bg_start + EXT4_BLOCKS_PER_GROUP(inode->i_sb) <= last_block) in ext4_inode_to_goal_block()
989 (EXT4_BLOCKS_PER_GROUP(inode->i_sb) / 16); in ext4_inode_to_goal_block()
992 ((last_block - bg_start) / 16); in ext4_inode_to_goal_block()