diff --git a/fs/ext4/super.c b/fs/ext4/super.c index e72145c4ae5a..9c918cf2eb7e 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -314,113 +314,113 @@ void ext4_superblock_csum_set(struct super_block *sb) ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, struct ext4_group_desc *bg) { - return le32_to_cpu(bg->bg_block_bitmap_lo) | + return le32_to_cpu(READ_ONCE(bg->bg_block_bitmap_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0); + (ext4_fsblk_t)le32_to_cpu(READ_ONCE(bg->bg_block_bitmap_hi)) << 32 : 0); } ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, struct ext4_group_desc *bg) { - return le32_to_cpu(bg->bg_inode_bitmap_lo) | + return le32_to_cpu(READ_ONCE(bg->bg_inode_bitmap_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0); + (ext4_fsblk_t)le32_to_cpu(READ_ONCE(bg->bg_inode_bitmap_hi)) << 32 : 0); } ext4_fsblk_t ext4_inode_table(struct super_block *sb, struct ext4_group_desc *bg) { - return le32_to_cpu(bg->bg_inode_table_lo) | + return le32_to_cpu(READ_ONCE(bg->bg_inode_table_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0); + (ext4_fsblk_t)le32_to_cpu(READ_ONCE(bg->bg_inode_table_hi)) << 32 : 0); } __u32 ext4_free_group_clusters(struct super_block *sb, struct ext4_group_desc *bg) { - return le16_to_cpu(bg->bg_free_blocks_count_lo) | + return le16_to_cpu(READ_ONCE(bg->bg_free_blocks_count_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0); + (__u32)le16_to_cpu(READ_ONCE(bg->bg_free_blocks_count_hi)) << 16 : 0); } __u32 ext4_free_inodes_count(struct super_block *sb, struct ext4_group_desc *bg) { - return le16_to_cpu(bg->bg_free_inodes_count_lo) | + return le16_to_cpu(READ_ONCE(bg->bg_free_inodes_count_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (__u32)le16_to_cpu(bg->bg_free_inodes_count_hi) << 16 : 0); + (__u32)le16_to_cpu(READ_ONCE(bg->bg_free_inodes_count_hi)) << 16 : 0); } __u32 ext4_used_dirs_count(struct super_block *sb, struct ext4_group_desc *bg) { - return le16_to_cpu(bg->bg_used_dirs_count_lo) | + return le16_to_cpu(READ_ONCE(bg->bg_used_dirs_count_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0); + (__u32)le16_to_cpu(READ_ONCE(bg->bg_used_dirs_count_hi)) << 16 : 0); } __u32 ext4_itable_unused_count(struct super_block *sb, struct ext4_group_desc *bg) { - return le16_to_cpu(bg->bg_itable_unused_lo) | + return le16_to_cpu(READ_ONCE(bg->bg_itable_unused_lo)) | (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ? - (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0); + (__u32)le16_to_cpu(READ_ONCE(bg->bg_itable_unused_hi)) << 16 : 0); } void ext4_block_bitmap_set(struct super_block *sb, struct ext4_group_desc *bg, ext4_fsblk_t blk) { - bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk); + WRITE_ONCE(bg->bg_block_bitmap_lo, cpu_to_le32((u32)blk)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32); + WRITE_ONCE(bg->bg_block_bitmap_hi, cpu_to_le32(blk >> 32)); } void ext4_inode_bitmap_set(struct super_block *sb, struct ext4_group_desc *bg, ext4_fsblk_t blk) { - bg->bg_inode_bitmap_lo = cpu_to_le32((u32)blk); + WRITE_ONCE(bg->bg_inode_bitmap_lo, cpu_to_le32((u32)blk)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32); + WRITE_ONCE(bg->bg_inode_bitmap_hi, cpu_to_le32(blk >> 32)); } void ext4_inode_table_set(struct super_block *sb, struct ext4_group_desc *bg, ext4_fsblk_t blk) { - bg->bg_inode_table_lo = cpu_to_le32((u32)blk); + WRITE_ONCE(bg->bg_inode_table_lo, cpu_to_le32((u32)blk)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_inode_table_hi = cpu_to_le32(blk >> 32); + WRITE_ONCE(bg->bg_inode_table_hi, cpu_to_le32(blk >> 32)); } void ext4_free_group_clusters_set(struct super_block *sb, struct ext4_group_desc *bg, __u32 count) { - bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count); + WRITE_ONCE(bg->bg_free_blocks_count_lo, cpu_to_le16((__u16)count)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16); + WRITE_ONCE(bg->bg_free_blocks_count_hi, cpu_to_le16(count >> 16)); } void ext4_free_inodes_set(struct super_block *sb, struct ext4_group_desc *bg, __u32 count) { - bg->bg_free_inodes_count_lo = cpu_to_le16((__u16)count); + WRITE_ONCE(bg->bg_free_inodes_count_lo, cpu_to_le16((__u16)count)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_free_inodes_count_hi = cpu_to_le16(count >> 16); + WRITE_ONCE(bg->bg_free_inodes_count_hi, cpu_to_le16(count >> 16)); } void ext4_used_dirs_set(struct super_block *sb, struct ext4_group_desc *bg, __u32 count) { - bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count); + WRITE_ONCE(bg->bg_used_dirs_count_lo, cpu_to_le16((__u16)count)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16); + WRITE_ONCE(bg->bg_used_dirs_count_hi, cpu_to_le16(count >> 16)); } void ext4_itable_unused_set(struct super_block *sb, struct ext4_group_desc *bg, __u32 count) { - bg->bg_itable_unused_lo = cpu_to_le16((__u16)count); + WRITE_ONCE(bg->bg_itable_unused_lo, cpu_to_le16((__u16)count)); if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT) - bg->bg_itable_unused_hi = cpu_to_le16(count >> 16); + WRITE_ONCE(bg->bg_itable_unused_hi, cpu_to_le16(count >> 16)); } static void __ext4_update_tstamp(__le32 *lo, __u8 *hi, time64_t now)