aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/ext4
diff options
context:
space:
mode:
authorRitesh Harjani <riteshh@linux.ibm.com>2019-11-06 15:08:09 +0530
committerTheodore Ts'o <tytso@mit.edu>2019-11-10 19:52:03 -0500
commit4d06bfb97ecb0df4f5b057a73db002e28c22c35c (patch)
treed6e066b31738a16257297fe97f357c9d8eca1ca8 /fs/ext4
parentMerge branch 'mb/dio' into master (diff)
downloadwireguard-linux-4d06bfb97ecb0df4f5b057a73db002e28c22c35c.tar.xz
wireguard-linux-4d06bfb97ecb0df4f5b057a73db002e28c22c35c.zip
ext4: Add error handling for io_end_vec struct allocation
This patch adds the error handling in case of any memory allocation failure for io_end_vec. This was missing in original patch series which enables dioread_nolock for blocksize < pagesize. Fixes: c8cc88163f40 ("ext4: Add support for blocksize < pagesize in dioread_nolock") Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> Link: https://lore.kernel.org/r/20191106093809.10673-1-riteshh@linux.ibm.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/inode.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 381813205f99..de70f19bfa7e 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2240,6 +2240,10 @@ static int mpage_process_page(struct mpage_da_data *mpd, struct page *page,
err = 0;
if (!err && mpd->map.m_len && mpd->map.m_lblk > lblk) {
io_end_vec = ext4_alloc_io_end_vec(io_end);
+ if (IS_ERR(io_end_vec)) {
+ err = PTR_ERR(io_end_vec);
+ goto out;
+ }
io_end_vec->offset = mpd->map.m_lblk << blkbits;
}
*map_bh = true;
@@ -2405,8 +2409,11 @@ static int mpage_map_and_submit_extent(handle_t *handle,
loff_t disksize;
int progress = 0;
ext4_io_end_t *io_end = mpd->io_submit.io_end;
- struct ext4_io_end_vec *io_end_vec = ext4_alloc_io_end_vec(io_end);
+ struct ext4_io_end_vec *io_end_vec;
+ io_end_vec = ext4_alloc_io_end_vec(io_end);
+ if (IS_ERR(io_end_vec))
+ return PTR_ERR(io_end_vec);
io_end_vec->offset = ((loff_t)map->m_lblk) << inode->i_blkbits;
do {
err = mpage_map_one_extent(handle, mpd);