Otherwise random data from last bdrop() could be readed and it will cause unexpected behavior accidentally.
Signed-off-by: Gao Xiang <[email protected]> --- lib/inode.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/inode.c b/lib/inode.c index 16b011e..affd6db 100644 --- a/lib/inode.c +++ b/lib/inode.c @@ -523,14 +523,19 @@ int erofs_write_tail_end(struct erofs_inode *inode) ibh->op = &erofs_write_inline_bhops; } else { int ret; + erofs_off_t pos; erofs_mapbh(bh->block, true); - ret = dev_write(inode->idata, - erofs_btell(bh, true) - EROFS_BLKSIZ, - inode->idata_size); + pos = erofs_btell(bh, true) - EROFS_BLKSIZ; + ret = dev_write(inode->idata, pos, inode->idata_size); if (ret) return ret; - + if (inode->idata_size < EROFS_BLKSIZ) { + ret = dev_fillzero(pos + inode->idata_size, + EROFS_BLKSIZ - inode->idata_size); + if (ret) + return ret; + } inode->idata_size = 0; free(inode->idata); inode->idata = NULL; -- 2.17.1
