1
0
Fork 0

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: "Theodore Ts'o" <tytso@mit.edu>
hifive-unleashed-5.1
Theodore Ts'o 2013-02-15 03:35:57 -05:00
parent dc6982ff4d
commit 0f70b40613
2 changed files with 33 additions and 34 deletions

View File

@ -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)

View File

@ -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)
return ERR_PTR(err);
inode->i_size += inode->i_sb->s_blocksize; inode->i_size += inode->i_sb->s_blocksize;
EXT4_I(inode)->i_disksize = inode->i_size; EXT4_I(inode)->i_disksize = inode->i_size;
*err = ext4_journal_get_write_access(handle, bh); err = ext4_journal_get_write_access(handle, bh);
if (*err) { if (err) {
brelse(bh); brelse(bh);
bh = NULL; 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,
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 @@ journal_error:
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,
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,
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,
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,
} }
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)