提交 10560082 编写于 作者: T Theodore Ts'o

ext4: convert ext4_getblk() to use the ERR_PTR convention

Signed-off-by: NTheodore Ts'o <tytso@mit.edu>
上级 537d8f93
......@@ -2086,8 +2086,7 @@ extern int ext4_group_add_blocks(handle_t *handle, struct super_block *sb,
extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
/* inode.c */
struct buffer_head *ext4_getblk(handle_t *, struct inode *,
ext4_lblk_t, int, int *);
struct buffer_head *ext4_getblk(handle_t *, struct inode *, ext4_lblk_t, int);
struct buffer_head *ext4_bread(handle_t *, struct inode *,
ext4_lblk_t, int, int *);
int ext4_get_block_write(struct inode *inode, sector_t iblock,
......
......@@ -734,11 +734,11 @@ int ext4_get_block(struct inode *inode, sector_t iblock,
* `handle' can be NULL if create is zero
*/
struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
ext4_lblk_t block, int create, int *errp)
ext4_lblk_t block, int create)
{
struct ext4_map_blocks map;
struct buffer_head *bh;
int fatal = 0, err;
int err;
J_ASSERT(handle != NULL || create == 0);
......@@ -747,21 +747,14 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
err = ext4_map_blocks(handle, inode, &map,
create ? EXT4_GET_BLOCKS_CREATE : 0);
/* ensure we send some value back into *errp */
*errp = 0;
if (create && err == 0)
err = -ENOSPC; /* should never happen */
if (err == 0)
return create ? ERR_PTR(-ENOSPC) : NULL;
if (err < 0)
*errp = err;
if (err <= 0)
return NULL;
return ERR_PTR(err);
bh = sb_getblk(inode->i_sb, map.m_pblk);
if (unlikely(!bh)) {
*errp = -ENOMEM;
return NULL;
}
if (unlikely(!bh))
return ERR_PTR(-ENOMEM);
if (map.m_flags & EXT4_MAP_NEW) {
J_ASSERT(create != 0);
J_ASSERT(handle != NULL);
......@@ -775,25 +768,26 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
*/
lock_buffer(bh);
BUFFER_TRACE(bh, "call get_create_access");
fatal = ext4_journal_get_create_access(handle, bh);
if (!fatal && !buffer_uptodate(bh)) {
err = ext4_journal_get_create_access(handle, bh);
if (unlikely(err)) {
unlock_buffer(bh);
goto errout;
}
if (!buffer_uptodate(bh)) {
memset(bh->b_data, 0, inode->i_sb->s_blocksize);
set_buffer_uptodate(bh);
}
unlock_buffer(bh);
BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
err = ext4_handle_dirty_metadata(handle, inode, bh);
if (!fatal)
fatal = err;
} else {
if (unlikely(err))
goto errout;
} else
BUFFER_TRACE(bh, "not a new buffer");
}
if (fatal) {
*errp = fatal;
brelse(bh);
bh = NULL;
}
return bh;
errout:
brelse(bh);
return ERR_PTR(err);
}
struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode,
......@@ -801,7 +795,12 @@ struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode,
{
struct buffer_head *bh;
bh = ext4_getblk(handle, inode, block, create, err);
*err = 0;
bh = ext4_getblk(handle, inode, block, create);
if (IS_ERR(bh)) {
*err = PTR_ERR(bh);
return NULL;
}
if (!bh)
return bh;
if (buffer_uptodate(bh))
......
......@@ -1226,8 +1226,7 @@ static struct buffer_head * ext4_find_entry (struct inode *dir,
buffer */
int num = 0;
ext4_lblk_t nblocks;
int i, err = 0;
int namelen;
int i, namelen;
*res_dir = NULL;
sb = dir->i_sb;
......@@ -1293,10 +1292,10 @@ static struct buffer_head * ext4_find_entry (struct inode *dir,
break;
}
num++;
bh = ext4_getblk(NULL, dir, b++, 0, &err);
if (unlikely(err)) {
bh = ext4_getblk(NULL, dir, b++, 0);
if (unlikely(IS_ERR(bh))) {
if (ra_max == 0)
return ERR_PTR(err);
return bh;
break;
}
bh_use[ra_max] = bh;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册