If the same block is updated multiple times in a row during a single
file system operation, gd_index is decremented to use the same journal
entry again. Avoid loosing the already allocated buffer.

Signed-off-by: Stefan Brüns <stefan.bru...@rwth-aachen.de>
---
 fs/ext4/ext4_journal.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/ext4_journal.c b/fs/ext4/ext4_journal.c
index cf14049..5a25be4 100644
--- a/fs/ext4/ext4_journal.c
+++ b/fs/ext4/ext4_journal.c
@@ -190,7 +190,11 @@ int ext4fs_put_metadata(char *metadata_buffer, uint32_t 
blknr)
                printf("Invalid input arguments %s\n", __func__);
                return -EINVAL;
        }
-       dirty_block_ptr[gd_index]->buf = zalloc(fs->blksz);
+       if (dirty_block_ptr[gd_index]->buf)
+               assert(dirty_block_ptr[gd_index]->blknr == blknr);
+       else
+               dirty_block_ptr[gd_index]->buf = zalloc(fs->blksz);
+
        if (!dirty_block_ptr[gd_index]->buf)
                return -ENOMEM;
        memcpy(dirty_block_ptr[gd_index]->buf, metadata_buffer, fs->blksz);
-- 
2.9.3

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

Reply via email to