int erofs_blob_write_chunk_indexes(struct erofs_inode *inode,
erofs_off_t off)
{
+ erofs_blk_t remaining_blks = BLK_ROUND_UP(inode->sbi, inode->i_size);
struct erofs_inode_chunk_index idx = {0};
erofs_blk_t extent_start = EROFS_NULL_ADDR;
erofs_blk_t extent_end, chunkblks;
if (extent_start == EROFS_NULL_ADDR ||
idx.blkaddr != extent_end) {
if (extent_start != EROFS_NULL_ADDR) {
+ remaining_blks -= extent_end - extent_start;
tarerofs_blocklist_write(extent_start,
extent_end - extent_start,
source_offset);
memcpy(inode->chunkindexes + dst, &idx, sizeof(idx));
}
off = roundup(off, unit);
+ extent_end = min(extent_end, extent_start + remaining_blks);
if (extent_start != EROFS_NULL_ADDR)
tarerofs_blocklist_write(extent_start, extent_end - extent_start,
source_offset);