Skip to content

Commit 126efa6

Browse files
committed
fmt: cargo format code
1 parent 40d20c3 commit 126efa6

15 files changed

Lines changed: 409 additions & 281 deletions

src/blockgroup_description.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
55
use log::error;
66

7-
use crate::endian::*;
7+
use crate::checksum::{ext4_block_bitmap_csum32, ext4_group_desc_csum16, ext4_inode_bitmap_csum32};
88
use crate::crc32c::crc32c::ext4_superblock_has_metadata_csum;
9-
use crate::checksum::{ext4_group_desc_csum16, ext4_block_bitmap_csum32, ext4_inode_bitmap_csum32};
9+
use crate::endian::*;
1010
use crate::superblock::Ext4Superblock;
1111
/// Ext4 块组描述符结构
1212
///
@@ -54,7 +54,6 @@ impl Ext4GroupDesc {
5454
/// 64位块组描述符大小(64字节)
5555
pub const EXT4_DESC_SIZE_64BIT: usize = 64;
5656

57-
5857
/// 更新GDT的checksum字段
5958
/// 可选传入 block/inode 位图数据,一并更新 bitmap checksum 字段后再算 GDT 自身 checksum
6059
pub fn update_checksum(
@@ -89,11 +88,12 @@ impl Ext4GroupDesc {
8988

9089
let mut raw_desc_bytes = [0u8; Ext4GroupDesc::EXT4_DESC_SIZE_64BIT];
9190
desc_for_csum.to_disk_bytes(&mut raw_desc_bytes);
92-
self.bg_checksum = ext4_group_desc_csum16(superblock, group_id, &raw_desc_bytes[..desc_size]);
91+
self.bg_checksum =
92+
ext4_group_desc_csum16(superblock, group_id, &raw_desc_bytes[..desc_size]);
9393
}
9494

9595
/// 验证GDT checksum. 通过true返回验证成功, 否则返回false.
96-
pub fn verify_checksum(&self, superblock: &Ext4Superblock, group_id: u32){
96+
pub fn verify_checksum(&self, superblock: &Ext4Superblock, group_id: u32) {
9797
if !ext4_superblock_has_metadata_csum(superblock) {
9898
return; // 如果没有启用 metadata_csum,则跳过校验
9999
}
@@ -108,11 +108,17 @@ impl Ext4GroupDesc {
108108

109109
let mut raw_desc_bytes = [0u8; Ext4GroupDesc::EXT4_DESC_SIZE_64BIT];
110110
desc_for_csum.to_disk_bytes(&mut raw_desc_bytes);
111-
if ext4_group_desc_csum16(superblock, group_id, &raw_desc_bytes[..desc_size]) != self.bg_checksum {
112-
error!("Group descriptor checksum mismatch for group {}: expected {:04x}, got {:04x}", group_id, self.bg_checksum, ext4_group_desc_csum16(superblock, group_id, &raw_desc_bytes[..desc_size]));
111+
if ext4_group_desc_csum16(superblock, group_id, &raw_desc_bytes[..desc_size])
112+
!= self.bg_checksum
113+
{
114+
error!(
115+
"Group descriptor checksum mismatch for group {}: expected {:04x}, got {:04x}",
116+
group_id,
117+
self.bg_checksum,
118+
ext4_group_desc_csum16(superblock, group_id, &raw_desc_bytes[..desc_size])
119+
);
113120
panic!("GDT checksum verification failed for group {}", group_id);
114121
}
115-
116122
}
117123

118124
/// 获取块位图块号(64位)

src/checksum.rs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use crate::BLOCK_SIZE;
2+
use crate::crc32c::crc32c;
23
use crate::crc32c::{
34
crc32c_append, crc32c_init, ext4_crc32c_seed_from_superblock, ext4_superblock_has_metadata_csum,
45
};
5-
use crate::crc32c::crc32c;
66
use crate::disknode::Ext4Inode;
7-
use crate::entries::Ext4DirEntryTail;
87
use crate::endian::DiskFormat;
8+
use crate::entries::Ext4DirEntryTail;
99
use crate::jbd2::jbdstruct::JournalSuperBllockS;
1010
use crate::superblock::Ext4Superblock;
1111

@@ -54,11 +54,7 @@ pub fn ext4_update_superblock_checksum(sb: &mut Ext4Superblock) {
5454
/// ext4 在某些场景下会把 CRC32C 的低 16 位存入 `bg_checksum`。
5555
/// 此函数只提供计算入口,是否/何时启用仍需根据 feature 位与布局规则决定。
5656
#[allow(dead_code)]
57-
pub fn ext4_group_desc_csum16(
58-
sb: &Ext4Superblock,
59-
group_id: u32,
60-
desc_bytes: &[u8],
61-
) -> u16 {
57+
pub fn ext4_group_desc_csum16(sb: &Ext4Superblock, group_id: u32, desc_bytes: &[u8]) -> u16 {
6258
let seed = ext4_crc32c_seed_from_superblock(sb);
6359
let group_id_le = group_id.to_le_bytes();
6460
let csum = ext4_metadata_csum32(seed, &[&group_id_le, desc_bytes]);
@@ -123,7 +119,6 @@ pub fn ext4_metadata_block_csum32(sb: &Ext4Superblock, data: &[u8]) -> u32 {
123119
ext4_metadata_csum32(seed, &[data])
124120
}
125121

126-
127122
/// 校验目录块的 checksum 是否正确(读路径使用)。
128123
/// 返回 true 表示校验通过或未启用 metadata_csum。
129124
pub fn verify_ext4_dirblock_checksum(
@@ -155,31 +150,34 @@ pub fn verify_ext4_dirblock_checksum(
155150
}
156151

157152
/// 更新目录块(dirblock)的 CRC32C(32位)便捷封装
158-
pub fn update_ext4_dirblock_csum32(sb: &Ext4Superblock, parent_dir_ino: u32, generation: u32, block_bytes: &mut [u8]){
153+
pub fn update_ext4_dirblock_csum32(
154+
sb: &Ext4Superblock,
155+
parent_dir_ino: u32,
156+
generation: u32,
157+
block_bytes: &mut [u8],
158+
) {
159159
let has_checksum = ext4_superblock_has_metadata_csum(sb);
160160
if has_checksum {
161161
// 内核只对 tail 之前的数据计算 checksum:size = BLOCK_SIZE - 12
162162
let data_len = BLOCK_SIZE - Ext4DirEntryTail::TAIL_LEN as usize;
163-
let csum = ext4_dirblock_csum32(
164-
sb,
165-
parent_dir_ino,
166-
generation,
167-
&block_bytes[..data_len],
168-
);
169-
let tail_checksum = &mut block_bytes[BLOCK_SIZE-4..];
163+
let csum = ext4_dirblock_csum32(sb, parent_dir_ino, generation, &block_bytes[..data_len]);
164+
let tail_checksum = &mut block_bytes[BLOCK_SIZE - 4..];
170165
tail_checksum.copy_from_slice(&csum.to_le_bytes());
171166
}
172167
}
173-
174-
175168

176169
/// 计算目录块(dirblock)的 CRC32C(32位)。
177170
///
178171
/// 目录块的 checksum 与目录自身的 inode 号和 i_generation 绑定,
179172
/// 避免跨目录搬运或 inode 复用后误通过校验。
180173
/// 输入形式:`seed + uuid + ino + gen + block_bytes`。
181174
#[allow(dead_code)]
182-
pub fn ext4_dirblock_csum32(sb: &Ext4Superblock, ino: u32, generation: u32, block_bytes: &[u8]) -> u32 {
175+
pub fn ext4_dirblock_csum32(
176+
sb: &Ext4Superblock,
177+
ino: u32,
178+
generation: u32,
179+
block_bytes: &[u8],
180+
) -> u32 {
183181
let seed = ext4_crc32c_seed_from_superblock(sb);
184182
let ino_le = ino.to_le_bytes();
185183
let gen_le = generation.to_le_bytes();
@@ -258,4 +256,3 @@ pub fn ext4_inode_bitmap_csum32(sb: &Ext4Superblock, bitmap_bytes: &[u8]) -> u32
258256
let sz = core::cmp::min(sz, bitmap_bytes.len());
259257
ext4_metadata_csum32(seed, &[&bitmap_bytes[..sz]])
260258
}
261-

src/config.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
66
use crate::superblock::*;
77

8-
9-
10-
118
// ============================================================================
129
// Journal 相关配置
1310
// ============================================================================
@@ -48,7 +45,7 @@ pub const DEFAULT_INODE_SIZE: u16 = 256;
4845
// 数据结构缓存相关配置,在小的嵌入式系统中可以适当调小防止崩内存
4946
// ============================================================================
5047
/// 是否使用多级缓存(Inode表/datablock/bitmap/gdt 缓存) 默认开启(建议在某些特殊情况下关闭,会增加文件系统的开销)
51-
pub const USE_MULTILEVEL_CACHE: bool = cfg!(feature= "USE_MULTILEVEL_CACHE");
48+
pub const USE_MULTILEVEL_CACHE: bool = cfg!(feature = "USE_MULTILEVEL_CACHE");
5249
///Inodecahe数量
5350
pub const INODE_CACHE_MAX: usize = 128;
5451
///Datablock cahce数量
@@ -91,7 +88,8 @@ pub const DEFAULT_FEATURE_INCOMPAT: u32 = Ext4Superblock::EXT4_FEATURE_INCOMPAT_
9188

9289
/// 默认的只读兼容特性标志
9390
pub const DEFAULT_FEATURE_RO_COMPAT: u32 = Ext4Superblock::EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE
94-
| Ext4Superblock::EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER | Ext4Superblock::EXT4_FEATURE_RO_COMPAT_METADATA_CSUM;
91+
| Ext4Superblock::EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER
92+
| Ext4Superblock::EXT4_FEATURE_RO_COMPAT_METADATA_CSUM;
9593

9694
// ============================================================================
9795
// 魔数和版本

src/crc32c/arm64.rs

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
#[cfg(target_arch = "aarch64")]
42
#[allow(dead_code)]
53
use core::arch::asm;
@@ -14,7 +12,7 @@ lazy_static::lazy_static! {
1412

1513
#[cfg(target_arch = "aarch64")]
1614
#[allow(dead_code)]
17-
use core::arch::aarch64::{__crc32cb, __crc32ch, __crc32cw, __crc32cd};
15+
use core::arch::aarch64::{__crc32cb, __crc32cd, __crc32ch, __crc32cw};
1816
/// 检查 CPU 是否支持 CRC32 硬件加速
1917
/// 读取 ID_AA64ISAR0_EL1 寄存器的 [19:16] 位
2018
#[cfg(target_arch = "aarch64")]
@@ -28,7 +26,7 @@ pub fn has_hardware_crc32() -> bool {
2826
// mrs: Move from System Register to general purpose register
2927
asm!("mrs {}, ID_AA64ISAR0_EL1", out(reg) reg_val);
3028
}
31-
29+
3230
// Bits [19:16] 代表 CRC32 支持情况
3331
let crc_field = (reg_val >> 16) & 0xF;
3432
warn!("ID_AA64ISAR0_EL1[19:16]: {:#x}", crc_field);
@@ -42,7 +40,6 @@ pub fn has_hardware_crc32() -> bool {
4240
}
4341
}
4442

45-
4643
/// 使用硬件指令计算 CRC32C (Castagnoli)
4744
/// 自动处理 64位/32位/16位/8位 对齐以达到最大吞吐量
4845
#[cfg(target_arch = "aarch64")]
@@ -53,47 +50,47 @@ pub unsafe fn crc32c_hardware(mut crc: u32, data: &[u8]) -> u32 {
5350
// Ext4 这里的 crc 通常需要取反传入 (!crc),但这取决于你的调用层逻辑
5451
// 这里的实现只负责单纯的 update
5552
unsafe {
56-
let mut p = data.as_ptr();
57-
let mut len = data.len();
53+
let mut p = data.as_ptr();
54+
let mut len = data.len();
5855

59-
// 1. 处理头部不对齐的部分 (Alignment to 8 bytes)
60-
// 这里的目的是为了后续能由 u64 (8字节) 快速处理
61-
while len > 0 && (p as usize) % 8 != 0 {
62-
crc = __crc32cb(crc, *p);
63-
p = p.add(1);
64-
len -= 1;
65-
}
56+
// 1. 处理头部不对齐的部分 (Alignment to 8 bytes)
57+
// 这里的目的是为了后续能由 u64 (8字节) 快速处理
58+
while len > 0 && (p as usize) % 8 != 0 {
59+
crc = __crc32cb(crc, *p);
60+
p = p.add(1);
61+
len -= 1;
62+
}
6663

67-
// 2. 核心循环:一次处理 64 bits (8 bytes)
68-
// 这是最快的部分,现代 CPU 一个周期能吞吐 64 位
69-
while len >= 8 {
70-
// 读取 64 位数据
71-
let val = *(p as *const u64);
72-
crc = __crc32cd(crc, val);
73-
p = p.add(8);
74-
len -= 8;
75-
}
64+
// 2. 核心循环:一次处理 64 bits (8 bytes)
65+
// 这是最快的部分,现代 CPU 一个周期能吞吐 64 位
66+
while len >= 8 {
67+
// 读取 64 位数据
68+
let val = *(p as *const u64);
69+
crc = __crc32cd(crc, val);
70+
p = p.add(8);
71+
len -= 8;
72+
}
7673

77-
// 3. 处理剩余不足 8 字节的尾部
78-
// 降级处理: 4字节 -> 2字节 -> 1字节
79-
if len >= 4 {
80-
let val = *(p as *const u32);
81-
crc = __crc32cw(crc, val);
82-
p = p.add(4);
83-
len -= 4;
84-
}
85-
86-
if len >= 2 {
87-
let val = *(p as *const u16);
88-
crc = __crc32ch(crc, val);
89-
p = p.add(2);
90-
len -= 2;
91-
}
92-
93-
if len > 0 {
94-
crc = __crc32cb(crc, *p);
95-
}
74+
// 3. 处理剩余不足 8 字节的尾部
75+
// 降级处理: 4字节 -> 2字节 -> 1字节
76+
if len >= 4 {
77+
let val = *(p as *const u32);
78+
crc = __crc32cw(crc, val);
79+
p = p.add(4);
80+
len -= 4;
81+
}
82+
83+
if len >= 2 {
84+
let val = *(p as *const u16);
85+
crc = __crc32ch(crc, val);
86+
p = p.add(2);
87+
len -= 2;
88+
}
89+
90+
if len > 0 {
91+
crc = __crc32cb(crc, *p);
92+
}
9693

97-
crc
94+
crc
9895
}
9996
}

src/crc32c/crc32c.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,8 @@ pub fn crc32c_append(crc: u32, data: &[u8]) -> u32 {
6060
#[cfg(target_arch = "aarch64")]
6161
{
6262
if *HARDWARE_SUPPORT_CRC32 {
63-
return unsafe { crc32c_hardware(crc, data) };
64-
63+
return unsafe { crc32c_hardware(crc, data) };
6564
}
66-
6765
}
6866

6967
crc32c_update(crc, data)
@@ -90,7 +88,6 @@ pub fn ext4_crc32c_seed_from_superblock(sb: &Ext4Superblock) -> u32 {
9088
}
9189
}
9290

93-
9491
#[cfg(test)]
9592
mod tests {
9693
use super::*;
@@ -116,4 +113,4 @@ mod tests {
116113

117114
assert_eq!(inc, crc32c(data));
118115
}
119-
}
116+
}

src/crc32c/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
pub mod crc32c;
21
pub mod arm64;
2+
pub mod crc32c;
33

44
// Re-export commonly used functions from crc32c module
5+
pub use crc32c::crc32c;
56
pub use crc32c::crc32c_append;
6-
pub use crc32c::crc32c_init;
77
pub use crc32c::crc32c_finalize;
8-
pub use crc32c::crc32c;
8+
pub use crc32c::crc32c_init;
99
pub use crc32c::ext4_crc32c_seed_from_superblock;
10-
pub use crc32c::ext4_superblock_has_metadata_csum;
10+
pub use crc32c::ext4_superblock_has_metadata_csum;

0 commit comments

Comments
 (0)