From: Darrick J. Wong Date: Thu, 12 Dec 2013 18:19:46 +0000 (-0500) Subject: libext2fs: fail fileio write if we can't allocate a block X-Git-Tag: v1.42.9~65 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=8a86bbb19714c135aef07095d0b3c1d7e4f7a155;p=tools%2Fe2fsprogs.git libext2fs: fail fileio write if we can't allocate a block If we're using ext2fs_file_write() to write to a hole in a file, ensure that we can actually allocate the block before updating i_size. In other words, don't update i_size and don't return success if we hit an error while allocating space. Signed-off-by: Darrick J. Wong Signed-off-by: "Theodore Ts'o" --- diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c index d092e65..03bdf86 100644 --- a/lib/ext2fs/fileio.c +++ b/lib/ext2fs/fileio.c @@ -297,6 +297,20 @@ errcode_t ext2fs_file_write(ext2_file_t file, const void *buf, if (retval) goto fail; + /* + * OK, the physical block hasn't been allocated yet. + * Allocate it. + */ + if (!file->physblock) { + retval = ext2fs_bmap2(fs, file->ino, &file->inode, + BMAP_BUFFER, + file->ino ? BMAP_ALLOC : 0, + file->blockno, 0, + &file->physblock); + if (retval) + goto fail; + } + file->flags |= EXT2_FILE_BUF_DIRTY; memcpy(file->buf+start, ptr, c); file->pos += c;