diff options
Diffstat (limited to 'ext4_utils/indirect.c')
-rw-r--r-- | ext4_utils/indirect.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/ext4_utils/indirect.c b/ext4_utils/indirect.c index 4e768a16..70f04d6e 100644 --- a/ext4_utils/indirect.c +++ b/ext4_utils/indirect.c @@ -484,9 +484,10 @@ u8 *inode_allocate_data_indirect(struct ext4_inode *inode, unsigned long len, unsigned long backing_len) { struct block_allocation *alloc; + u32 block_len = DIV_ROUND_UP(len, info.block_size); u8 *data = NULL; - alloc = do_inode_allocate_indirect(inode, len); + alloc = do_inode_allocate_indirect(inode, block_len); if (alloc == NULL) { error("failed to allocate extents for %lu bytes", len); return NULL; @@ -498,6 +499,10 @@ u8 *inode_allocate_data_indirect(struct ext4_inode *inode, unsigned long len, error("failed to create backing for %lu bytes", backing_len); } + rewind_alloc(alloc); + if (do_inode_attach_indirect(inode, alloc, block_len)) + error("failed to attach blocks to indirect inode"); + free_alloc(alloc); return data; |