diff options
author | marcin.slusarz@gmail.com <marcin.slusarz@gmail.com> | 2008-01-30 22:03:58 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2008-04-17 14:22:28 +0200 |
commit | 1ab9278570077101d1e367399686be62b22c4019 (patch) | |
tree | 3f7f705199e3ab469a366333d6c48e8cde49e36d /fs | |
parent | c2104fda5e6a6981e385b2d11c5c591ab06d82a2 (diff) | |
download | kernel_goldelico_gta04-1ab9278570077101d1e367399686be62b22c4019.zip kernel_goldelico_gta04-1ab9278570077101d1e367399686be62b22c4019.tar.gz kernel_goldelico_gta04-1ab9278570077101d1e367399686be62b22c4019.tar.bz2 |
udf: simplify __udf_read_inode
- move all brelse(ibh) after main if, because it's called
on every path except one where ibh is null
- move variables to the most inner blocks
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/udf/inode.c | 52 |
1 files changed, 23 insertions, 29 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 91d1f1d..ddd7780 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -1101,42 +1101,36 @@ static void __udf_read_inode(struct inode *inode) fe = (struct fileEntry *)bh->b_data; if (fe->icbTag.strategyType == cpu_to_le16(4096)) { - struct buffer_head *ibh = NULL, *nbh = NULL; - struct indirectEntry *ie; + struct buffer_head *ibh; ibh = udf_read_ptagged(inode->i_sb, iinfo->i_location, 1, &ident); - if (ident == TAG_IDENT_IE) { - if (ibh) { - kernel_lb_addr loc; - ie = (struct indirectEntry *)ibh->b_data; - - loc = lelb_to_cpu(ie->indirectICB.extLocation); - - if (ie->indirectICB.extLength && - (nbh = udf_read_ptagged(inode->i_sb, loc, 0, - &ident))) { - if (ident == TAG_IDENT_FE || - ident == TAG_IDENT_EFE) { - memcpy(&iinfo->i_location, - &loc, - sizeof(kernel_lb_addr)); - brelse(bh); - brelse(ibh); - brelse(nbh); - __udf_read_inode(inode); - return; - } else { - brelse(nbh); - brelse(ibh); - } - } else { + if (ident == TAG_IDENT_IE && ibh) { + struct buffer_head *nbh = NULL; + kernel_lb_addr loc; + struct indirectEntry *ie; + + ie = (struct indirectEntry *)ibh->b_data; + loc = lelb_to_cpu(ie->indirectICB.extLocation); + + if (ie->indirectICB.extLength && + (nbh = udf_read_ptagged(inode->i_sb, loc, 0, + &ident))) { + if (ident == TAG_IDENT_FE || + ident == TAG_IDENT_EFE) { + memcpy(&iinfo->i_location, + &loc, + sizeof(kernel_lb_addr)); + brelse(bh); brelse(ibh); + brelse(nbh); + __udf_read_inode(inode); + return; } + brelse(nbh); } - } else { - brelse(ibh); } + brelse(ibh); } else if (fe->icbTag.strategyType != cpu_to_le16(4)) { printk(KERN_ERR "udf: unsupported strategy type: %d\n", le16_to_cpu(fe->icbTag.strategyType)); |