|
@@ -725,6 +725,7 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
|
|
|
struct ext4_extent_header *eh;
|
|
|
struct buffer_head *bh;
|
|
|
short int depth, i, ppos = 0, alloc = 0;
|
|
|
+ int ret;
|
|
|
|
|
|
eh = ext_inode_hdr(inode);
|
|
|
depth = ext_depth(inode);
|
|
@@ -752,12 +753,15 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
|
|
|
path[ppos].p_ext = NULL;
|
|
|
|
|
|
bh = sb_getblk(inode->i_sb, path[ppos].p_block);
|
|
|
- if (unlikely(!bh))
|
|
|
+ if (unlikely(!bh)) {
|
|
|
+ ret = -ENOMEM;
|
|
|
goto err;
|
|
|
+ }
|
|
|
if (!bh_uptodate_or_lock(bh)) {
|
|
|
trace_ext4_ext_load_extent(inode, block,
|
|
|
path[ppos].p_block);
|
|
|
- if (bh_submit_read(bh) < 0) {
|
|
|
+ ret = bh_submit_read(bh);
|
|
|
+ if (ret < 0) {
|
|
|
put_bh(bh);
|
|
|
goto err;
|
|
|
}
|
|
@@ -768,13 +772,15 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
|
|
|
put_bh(bh);
|
|
|
EXT4_ERROR_INODE(inode,
|
|
|
"ppos %d > depth %d", ppos, depth);
|
|
|
+ ret = -EIO;
|
|
|
goto err;
|
|
|
}
|
|
|
path[ppos].p_bh = bh;
|
|
|
path[ppos].p_hdr = eh;
|
|
|
i--;
|
|
|
|
|
|
- if (ext4_ext_check_block(inode, eh, i, bh))
|
|
|
+ ret = ext4_ext_check_block(inode, eh, i, bh);
|
|
|
+ if (ret < 0)
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
@@ -796,7 +802,7 @@ err:
|
|
|
ext4_ext_drop_refs(path);
|
|
|
if (alloc)
|
|
|
kfree(path);
|
|
|
- return ERR_PTR(-EIO);
|
|
|
+ return ERR_PTR(ret);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -951,7 +957,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
|
|
|
}
|
|
|
bh = sb_getblk(inode->i_sb, newblock);
|
|
|
if (!bh) {
|
|
|
- err = -EIO;
|
|
|
+ err = -ENOMEM;
|
|
|
goto cleanup;
|
|
|
}
|
|
|
lock_buffer(bh);
|
|
@@ -1024,7 +1030,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
|
|
|
newblock = ablocks[--a];
|
|
|
bh = sb_getblk(inode->i_sb, newblock);
|
|
|
if (!bh) {
|
|
|
- err = -EIO;
|
|
|
+ err = -ENOMEM;
|
|
|
goto cleanup;
|
|
|
}
|
|
|
lock_buffer(bh);
|
|
@@ -1136,11 +1142,8 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
|
|
|
return err;
|
|
|
|
|
|
bh = sb_getblk(inode->i_sb, newblock);
|
|
|
- if (!bh) {
|
|
|
- err = -EIO;
|
|
|
- ext4_std_error(inode->i_sb, err);
|
|
|
- return err;
|
|
|
- }
|
|
|
+ if (!bh)
|
|
|
+ return -ENOMEM;
|
|
|
lock_buffer(bh);
|
|
|
|
|
|
err = ext4_journal_get_create_access(handle, bh);
|