Commit 0f70b406 authored by Theodore Ts'o's avatar Theodore Ts'o

ext4: use ERR_PTR() abstraction for ext4_append()

Use ERR_PTR()/IS_ERR() abstraction instead of passing in a separate
pointer to an integer for the error code, as a code cleanup.
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent dc6982ff
...@@ -707,6 +707,8 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode, ...@@ -707,6 +707,8 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
/* ensure we send some value back into *errp */ /* ensure we send some value back into *errp */
*errp = 0; *errp = 0;
if (create && err == 0)
err = -ENOSPC; /* should never happen */
if (err < 0) if (err < 0)
*errp = err; *errp = err;
if (err <= 0) if (err <= 0)
......
...@@ -51,34 +51,28 @@ ...@@ -51,34 +51,28 @@
static struct buffer_head *ext4_append(handle_t *handle, static struct buffer_head *ext4_append(handle_t *handle,
struct inode *inode, struct inode *inode,
ext4_lblk_t *block, int *err) ext4_lblk_t *block)
{ {
struct buffer_head *bh; struct buffer_head *bh;
int err = 0;
if (unlikely(EXT4_SB(inode->i_sb)->s_max_dir_size_kb && if (unlikely(EXT4_SB(inode->i_sb)->s_max_dir_size_kb &&
((inode->i_size >> 10) >= ((inode->i_size >> 10) >=
EXT4_SB(inode->i_sb)->s_max_dir_size_kb))) { EXT4_SB(inode->i_sb)->s_max_dir_size_kb)))
*err = -ENOSPC; return ERR_PTR(-ENOSPC);
return NULL;
}
*block = inode->i_size >> inode->i_sb->s_blocksize_bits; *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
bh = ext4_bread(handle, inode, *block, 1, err); bh = ext4_bread(handle, inode, *block, 1, &err);
if (bh) { if (!bh)
inode->i_size += inode->i_sb->s_blocksize; return ERR_PTR(err);
EXT4_I(inode)->i_disksize = inode->i_size; inode->i_size += inode->i_sb->s_blocksize;
*err = ext4_journal_get_write_access(handle, bh); EXT4_I(inode)->i_disksize = inode->i_size;
if (*err) { err = ext4_journal_get_write_access(handle, bh);
brelse(bh); if (err) {
bh = NULL; brelse(bh);
} ext4_std_error(inode->i_sb, err);
} return ERR_PTR(err);
if (!bh && !(*err)) {
*err = -EIO;
ext4_error(inode->i_sb,
"Directory hole detected on inode %lu\n",
inode->i_ino);
} }
return bh; return bh;
} }
...@@ -1555,11 +1549,12 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, ...@@ -1555,11 +1549,12 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
csum_size = sizeof(struct ext4_dir_entry_tail); csum_size = sizeof(struct ext4_dir_entry_tail);
bh2 = ext4_append (handle, dir, &newblock, &err); bh2 = ext4_append(handle, dir, &newblock);
if (!(bh2)) { if (IS_ERR(bh2)) {
brelse(*bh); brelse(*bh);
*bh = NULL; *bh = NULL;
goto errout; *error = PTR_ERR(bh2);
return NULL;
} }
BUFFER_TRACE(*bh, "get_write_access"); BUFFER_TRACE(*bh, "get_write_access");
...@@ -1640,7 +1635,6 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, ...@@ -1640,7 +1635,6 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
brelse(bh2); brelse(bh2);
*bh = NULL; *bh = NULL;
ext4_std_error(dir->i_sb, err); ext4_std_error(dir->i_sb, err);
errout:
*error = err; *error = err;
return NULL; return NULL;
} }
...@@ -1815,10 +1809,10 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry, ...@@ -1815,10 +1809,10 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
len = ((char *) root) + (blocksize - csum_size) - (char *) de; len = ((char *) root) + (blocksize - csum_size) - (char *) de;
/* Allocate new block for the 0th block's dirents */ /* Allocate new block for the 0th block's dirents */
bh2 = ext4_append(handle, dir, &block, &retval); bh2 = ext4_append(handle, dir, &block);
if (!(bh2)) { if (IS_ERR(bh2)) {
brelse(bh); brelse(bh);
return retval; return PTR_ERR(bh2);
} }
ext4_set_inode_flag(dir, EXT4_INODE_INDEX); ext4_set_inode_flag(dir, EXT4_INODE_INDEX);
data1 = bh2->b_data; data1 = bh2->b_data;
...@@ -1950,9 +1944,9 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, ...@@ -1950,9 +1944,9 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
return make_indexed_dir(handle, dentry, inode, bh); return make_indexed_dir(handle, dentry, inode, bh);
brelse(bh); brelse(bh);
} }
bh = ext4_append(handle, dir, &block, &retval); bh = ext4_append(handle, dir, &block);
if (!bh) if (IS_ERR(bh))
return retval; return PTR_ERR(bh);
de = (struct ext4_dir_entry_2 *) bh->b_data; de = (struct ext4_dir_entry_2 *) bh->b_data;
de->inode = 0; de->inode = 0;
de->rec_len = ext4_rec_len_to_disk(blocksize - csum_size, blocksize); de->rec_len = ext4_rec_len_to_disk(blocksize - csum_size, blocksize);
...@@ -2023,9 +2017,11 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry, ...@@ -2023,9 +2017,11 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
err = -ENOSPC; err = -ENOSPC;
goto cleanup; goto cleanup;
} }
bh2 = ext4_append (handle, dir, &newblock, &err); bh2 = ext4_append(handle, dir, &newblock);
if (!(bh2)) if (IS_ERR(bh2)) {
err = PTR_ERR(bh2);
goto cleanup; goto cleanup;
}
node2 = (struct dx_node *)(bh2->b_data); node2 = (struct dx_node *)(bh2->b_data);
entries2 = node2->entries; entries2 = node2->entries;
memset(&node2->fake, 0, sizeof(struct fake_dirent)); memset(&node2->fake, 0, sizeof(struct fake_dirent));
...@@ -2364,8 +2360,9 @@ static int ext4_init_new_dir(handle_t *handle, struct inode *dir, ...@@ -2364,8 +2360,9 @@ static int ext4_init_new_dir(handle_t *handle, struct inode *dir,
} }
inode->i_size = 0; inode->i_size = 0;
if (!(dir_block = ext4_append(handle, inode, &block, &err))) dir_block = ext4_append(handle, inode, &block);
goto out; if (IS_ERR(dir_block))
return PTR_ERR(dir_block);
BUFFER_TRACE(dir_block, "get_write_access"); BUFFER_TRACE(dir_block, "get_write_access");
err = ext4_journal_get_write_access(handle, dir_block); err = ext4_journal_get_write_access(handle, dir_block);
if (err) if (err)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment