Am 2016-08-29 10:46, schrieb Michael Walle:
[..snip..]

@@ -149,10 +169,10 @@ static void delete_double_indirect_block(struct
ext2_inode *inode)
        int i;
        short status;
        static int prev_bg_bmap_idx = -1;
-       long int blknr;
+       uint32_t blknr;
        int remainder;
        int bg_idx;
-       unsigned int blk_per_grp = ext4fs_root->sblock.blocks_per_group;
+ uint32_t blk_per_grp = le32_to_cpu(ext4fs_root->sblock.blocks_per_group);
        unsigned int *di_buffer = NULL;

This has to be __le32 *di_buffer. Therefore, there are still some le32_to_cpu() calls missing. I'll send a new version tomorrow.
This was found by Thomas Schäfer. Thanks.

        unsigned int *DIB_start_addr = NULL;
        struct ext2_block_group *bgd = NULL;
@@ -172,7 +192,7 @@ static void delete_double_indirect_block(struct
ext2_inode *inode)
                        return;
                }
                DIB_start_addr = (unsigned int *)di_buffer;
-               blknr = inode->b.blocks.double_indir_block;
+               blknr = le32_to_cpu(inode->b.blocks.double_indir_block);
                status = ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0,
                                        fs->blksz, (char *)di_buffer);
                for (i = 0; i < fs->blksz / sizeof(int); i++) {
@@ -189,12 +209,12 @@ static void delete_double_indirect_block(struct
ext2_inode *inode)
                        ext4fs_reset_block_bmap(*di_buffer,
                                        fs->blk_bmaps[bg_idx], bg_idx);
                        di_buffer++;
-                       bgd[bg_idx].free_blocks++;
-                       fs->sb->free_blocks++;
+                       ext4fs_bg_free_blocks_inc(&bgd[bg_idx]);
+                       ext4fs_sb_free_blocks_inc(fs->sb);
                        /* journal backup */
                        if (prev_bg_bmap_idx != bg_idx) {
-                               status = ext4fs_devread((lbaint_t)
-                                                       bgd[bg_idx].block_id
+                               status = ext4fs_devread(
+                                                       
(lbaint_t)le32_to_cpu(bgd[bg_idx].block_id)
                                                        * fs->sect_perblk, 0,
                                                        fs->blksz,
                                                        journal_buffer);
@@ -202,14 +222,14 @@ static void delete_double_indirect_block(struct
ext2_inode *inode)
                                        goto fail;

                                if (ext4fs_log_journal(journal_buffer,
-                                                       bgd[bg_idx].block_id))
+                                                       
le32_to_cpu(bgd[bg_idx].block_id)))
                                        goto fail;
                                prev_bg_bmap_idx = bg_idx;
                        }
                }

                /* removing the parent double indirect block */
-               blknr = inode->b.blocks.double_indir_block;
+               blknr = le32_to_cpu(inode->b.blocks.double_indir_block);
                bg_idx = blknr / blk_per_grp;
                if (fs->blksz == 1024) {
                        remainder = blknr % blk_per_grp;
@@ -217,23 +237,23 @@ static void delete_double_indirect_block(struct
ext2_inode *inode)
                                bg_idx--;
                }
                ext4fs_reset_block_bmap(blknr, fs->blk_bmaps[bg_idx], bg_idx);
-               bgd[bg_idx].free_blocks++;
-               fs->sb->free_blocks++;
+               ext4fs_bg_free_blocks_inc(&bgd[bg_idx]);
+               ext4fs_sb_free_blocks_inc(fs->sb);
                /* journal backup */
                if (prev_bg_bmap_idx != bg_idx) {
                        memset(journal_buffer, '\0', fs->blksz);
-                       status = ext4fs_devread((lbaint_t)bgd[bg_idx].block_id *
+ status = ext4fs_devread((lbaint_t)le32_to_cpu(bgd[bg_idx].block_id) *
                                                fs->sect_perblk, 0, fs->blksz,
                                                journal_buffer);
                        if (status == 0)
                                goto fail;

                        if (ext4fs_log_journal(journal_buffer,
-                                               bgd[bg_idx].block_id))
+                                               
le32_to_cpu(bgd[bg_idx].block_id)))
                                goto fail;
                        prev_bg_bmap_idx = bg_idx;
                }
-               debug("DIPB releasing %ld\n", blknr);
+               debug("DIPB releasing %d\n", blknr);
        }
 fail:
        free(DIB_start_addr);
@@ -245,10 +265,10 @@ static void delete_triple_indirect_block(struct
ext2_inode *inode)
        int i, j;
        short status;
        static int prev_bg_bmap_idx = -1;
-       long int blknr;
+       uint32_t blknr;
        int remainder;
        int bg_idx;
-       unsigned int blk_per_grp = ext4fs_root->sblock.blocks_per_group;
+ uint32_t blk_per_grp = le32_to_cpu(ext4fs_root->sblock.blocks_per_group);
        unsigned int *tigp_buffer = NULL;
likewise

        unsigned int *tib_start_addr = NULL;
        unsigned int *tip_buffer = NULL;
likewise

[..snip..]

-michael
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to