mirror of
https://github.com/bobranten/Ext4Fsd.git
synced 2025-10-30 05:18:31 -05:00
more work on metadata checksums
This commit is contained in:
@@ -1025,10 +1025,10 @@ Again:
|
|||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto errorout;
|
goto errorout;
|
||||||
}
|
}
|
||||||
ext4_group_desc_csum_set(sb, Group, gd);
|
|
||||||
ext4_init_block_bitmap(sb, bh, Group, gd);
|
ext4_init_block_bitmap(sb, bh, Group, gd);
|
||||||
set_buffer_uptodate(bh);
|
set_buffer_uptodate(bh);
|
||||||
gd->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
|
gd->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
|
||||||
|
ext4_block_bitmap_csum_set(sb, Group, gd, bh);
|
||||||
Ext2SaveGroup(IrpContext, Vcb, Group);
|
Ext2SaveGroup(IrpContext, Vcb, Group);
|
||||||
} else {
|
} else {
|
||||||
bh = sb_getblk(sb, bitmap_blk);
|
bh = sb_getblk(sb, bitmap_blk);
|
||||||
@@ -1084,6 +1084,7 @@ Again:
|
|||||||
|
|
||||||
/* no blocks found: set bg_free_blocks_count to 0 */
|
/* no blocks found: set bg_free_blocks_count to 0 */
|
||||||
ext4_free_blks_set(sb, gd, 0);
|
ext4_free_blks_set(sb, gd, 0);
|
||||||
|
ext4_block_bitmap_csum_set(sb, Group, gd, bh);
|
||||||
Ext2SaveGroup(IrpContext, Vcb, Group);
|
Ext2SaveGroup(IrpContext, Vcb, Group);
|
||||||
|
|
||||||
/* will try next group */
|
/* will try next group */
|
||||||
@@ -1550,7 +1551,6 @@ repeat:
|
|||||||
set_buffer_uptodate(bh);
|
set_buffer_uptodate(bh);
|
||||||
gd->bg_flags &= cpu_to_le16(~EXT4_BG_INODE_UNINIT);
|
gd->bg_flags &= cpu_to_le16(~EXT4_BG_INODE_UNINIT);
|
||||||
ext4_inode_bitmap_csum_set(sb, Group, gd, bh, EXT4_INODES_PER_GROUP(sb) / 8);
|
ext4_inode_bitmap_csum_set(sb, Group, gd, bh, EXT4_INODES_PER_GROUP(sb) / 8);
|
||||||
ext4_group_desc_csum_set(sb, Group, gd);
|
|
||||||
Ext2SaveGroup(IrpContext, Vcb, Group);
|
Ext2SaveGroup(IrpContext, Vcb, Group);
|
||||||
} else {
|
} else {
|
||||||
bh = sb_getblk(sb, bitmap_blk);
|
bh = sb_getblk(sb, bitmap_blk);
|
||||||
@@ -1649,10 +1649,8 @@ repeat:
|
|||||||
/* recheck and clear flag under lock if we still need to */
|
/* recheck and clear flag under lock if we still need to */
|
||||||
block_bitmap_bh = sb_getblk_zero(sb, ext4_block_bitmap(sb, gd));
|
block_bitmap_bh = sb_getblk_zero(sb, ext4_block_bitmap(sb, gd));
|
||||||
if (block_bitmap_bh) {
|
if (block_bitmap_bh) {
|
||||||
ext4_block_bitmap_csum_set(sb, Group, gd,
|
|
||||||
block_bitmap_bh);
|
|
||||||
ext4_group_desc_csum_set(sb, Group, gd);
|
|
||||||
free = ext4_init_block_bitmap(sb, block_bitmap_bh, Group, gd);
|
free = ext4_init_block_bitmap(sb, block_bitmap_bh, Group, gd);
|
||||||
|
ext4_block_bitmap_csum_set(sb, Group, gd, block_bitmap_bh);
|
||||||
set_buffer_uptodate(block_bitmap_bh);
|
set_buffer_uptodate(block_bitmap_bh);
|
||||||
brelse(block_bitmap_bh);
|
brelse(block_bitmap_bh);
|
||||||
gd->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
|
gd->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
|
||||||
@@ -1669,7 +1667,6 @@ repeat:
|
|||||||
ext4_used_dirs_set(sb, gd, ext4_used_dirs_count(sb, gd) + 1);
|
ext4_used_dirs_set(sb, gd, ext4_used_dirs_count(sb, gd) + 1);
|
||||||
}
|
}
|
||||||
ext4_inode_bitmap_csum_set(sb, Group, gd, bh, EXT4_INODES_PER_GROUP(sb) / 8);
|
ext4_inode_bitmap_csum_set(sb, Group, gd, bh, EXT4_INODES_PER_GROUP(sb) / 8);
|
||||||
ext4_group_desc_csum_set(sb, Group, gd);
|
|
||||||
Ext2SaveGroup(IrpContext, Vcb, Group);
|
Ext2SaveGroup(IrpContext, Vcb, Group);
|
||||||
Ext2UpdateVcbStat(IrpContext, Vcb);
|
Ext2UpdateVcbStat(IrpContext, Vcb);
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
@@ -1822,7 +1819,6 @@ Ext2FreeInode(
|
|||||||
ext4_used_dirs_count(sb, gd) - 1);
|
ext4_used_dirs_count(sb, gd) - 1);
|
||||||
}
|
}
|
||||||
ext4_inode_bitmap_csum_set(sb, Group, gd, bh, EXT4_INODES_PER_GROUP(sb) / 8);
|
ext4_inode_bitmap_csum_set(sb, Group, gd, bh, EXT4_INODES_PER_GROUP(sb) / 8);
|
||||||
ext4_group_desc_csum_set(sb, Group, gd);
|
|
||||||
Ext2SaveGroup(IrpContext, Vcb, Group);
|
Ext2SaveGroup(IrpContext, Vcb, Group);
|
||||||
Ext2UpdateVcbStat(IrpContext, Vcb);
|
Ext2UpdateVcbStat(IrpContext, Vcb);
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
@@ -3027,10 +3023,6 @@ int ext4_check_descriptors(struct super_block *sb)
|
|||||||
if (!ext4_group_desc_csum_verify(sb, i, gdp)) {
|
if (!ext4_group_desc_csum_verify(sb, i, gdp)) {
|
||||||
printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "
|
printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "
|
||||||
"Checksum for group %u failed.\n", i);
|
"Checksum for group %u failed.\n", i);
|
||||||
if (!IsVcbReadOnly(Vcb)) {
|
|
||||||
//__brelse(bh);
|
|
||||||
//return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!flexbg_flag)
|
if (!flexbg_flag)
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group,
|
|||||||
int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group,
|
int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group,
|
||||||
struct ext4_group_desc *gdp)
|
struct ext4_group_desc *gdp)
|
||||||
{
|
{
|
||||||
if (!ext4_has_feature_metadata_csum(sb))
|
if (!ext4_has_group_desc_csum(sb))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return gdp->bg_checksum == ext4_group_desc_csum(sb, block_group, gdp);
|
return gdp->bg_checksum == ext4_group_desc_csum(sb, block_group, gdp);
|
||||||
|
|||||||
1
Ext4Fsd/jbd/readme.txt
Normal file
1
Ext4Fsd/jbd/readme.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This is a port of jbd from the Linux source code, it is unused because the driver is updated to use jbd2.
|
||||||
Reference in New Issue
Block a user