提交 0385f1f9 编写于 作者: A Al Viro

ufs_getfrag_block(): tidy up a bit

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 5fbfb238
...@@ -398,40 +398,30 @@ ufs_inode_getblock(struct inode *inode, u64 ind_block, ...@@ -398,40 +398,30 @@ ufs_inode_getblock(struct inode *inode, u64 ind_block,
static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create) static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create)
{ {
struct super_block * sb = inode->i_sb; struct super_block *sb = inode->i_sb;
struct ufs_sb_info * sbi = UFS_SB(sb); struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
struct ufs_sb_private_info * uspi = sbi->s_uspi; int err = 0, new = 0;
struct buffer_head * bh;
int ret, err, new;
unsigned offsets[4]; unsigned offsets[4];
int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets); int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets);
unsigned long phys;
u64 phys64 = 0; u64 phys64 = 0;
unsigned long phys;
unsigned frag = fragment & uspi->s_fpbmask; unsigned frag = fragment & uspi->s_fpbmask;
if (!create) { if (!create) {
phys64 = ufs_frag_map(inode, offsets, depth); phys64 = ufs_frag_map(inode, offsets, depth);
if (phys64) { goto out;
phys64 += frag;
map_bh(bh_result, sb, phys64);
}
return 0;
} }
/* This code entered only while writing ....? */ /* This code entered only while writing ....? */
err = -EIO;
new = 0;
ret = 0;
bh = NULL;
mutex_lock(&UFS_I(inode)->truncate_mutex); mutex_lock(&UFS_I(inode)->truncate_mutex);
UFSD("ENTER, ino %lu, fragment %llu\n", inode->i_ino, (unsigned long long)fragment); UFSD("ENTER, ino %lu, fragment %llu\n", inode->i_ino, (unsigned long long)fragment);
if (!depth) if (unlikely(!depth)) {
goto abort_too_big; ufs_warning(sb, "ufs_get_block", "block > big");
err = -EIO;
err = 0; goto out;
}
if (UFS_I(inode)->i_lastfrag < UFS_NDIR_FRAGMENT) { if (UFS_I(inode)->i_lastfrag < UFS_NDIR_FRAGMENT) {
unsigned lastfrag = UFS_I(inode)->i_lastfrag; unsigned lastfrag = UFS_I(inode)->i_lastfrag;
...@@ -439,7 +429,7 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff ...@@ -439,7 +429,7 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
if (tailfrags && fragment >= lastfrag) { if (tailfrags && fragment >= lastfrag) {
if (!ufs_extend_tail(inode, fragment, if (!ufs_extend_tail(inode, fragment,
&err, bh_result->b_page)) &err, bh_result->b_page))
goto abort; goto out;
} }
} }
...@@ -456,23 +446,15 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff ...@@ -456,23 +446,15 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 1], phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 1],
fragment, &err, &phys, &new, bh_result->b_page); fragment, &err, &phys, &new, bh_result->b_page);
} }
out:
if (phys64) { if (phys64) {
phys64 += frag; phys64 += frag;
phys = phys64; map_bh(bh_result, sb, phys64);
}
if (err)
goto abort;
if (new) if (new)
set_buffer_new(bh_result); set_buffer_new(bh_result);
map_bh(bh_result, sb, phys); }
abort:
mutex_unlock(&UFS_I(inode)->truncate_mutex); mutex_unlock(&UFS_I(inode)->truncate_mutex);
return err; return err;
abort_too_big:
ufs_warning(sb, "ufs_get_block", "block > big");
goto abort;
} }
static int ufs_writepage(struct page *page, struct writeback_control *wbc) static int ufs_writepage(struct page *page, struct writeback_control *wbc)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册