summaryrefslogtreecommitdiff
path: root/fs/ocfs2
diff options
context:
space:
mode:
authorJoel Becker <joel.becker@oracle.com>2008-08-21 04:09:42 +0400
committerMark Fasheh <mfasheh@suse.com>2008-10-14 03:57:04 +0400
commit1c25d93a4a27c90c3ae33f9e724f7b67783d68d1 (patch)
treed62c9b19fae527770939748566ce3a31ce0bce53 /fs/ocfs2
parent0ce1010f1a4319e02574b856d50dfdc0ed855f40 (diff)
downloadlinux-1c25d93a4a27c90c3ae33f9e724f7b67783d68d1.tar.xz
ocfs2: Use struct ocfs2_extent_tree in ocfs2_num_free_extents().
ocfs2_num_free_extents() re-implements the logic of ocfs2_get_extent_tree(). Now that ocfs2_get_extent_tree() does not allocate, let's use it in ocfs2_num_free_extents() to simplify the code. The inode validation code in ocfs2_num_free_extents() is not needed. All callers are passing in pre-validated inodes. Signed-off-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2')
-rw-r--r--fs/ocfs2/alloc.c30
1 files changed, 5 insertions, 25 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index fe2ddbb81f74..d1aa7249deb2 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -618,34 +618,13 @@ int ocfs2_num_free_extents(struct ocfs2_super *osb,
struct ocfs2_extent_block *eb;
struct buffer_head *eb_bh = NULL;
u64 last_eb_blk = 0;
+ struct ocfs2_extent_tree et;
mlog_entry_void();
- if (type == OCFS2_DINODE_EXTENT) {
- struct ocfs2_dinode *fe =
- (struct ocfs2_dinode *)root_bh->b_data;
- if (!OCFS2_IS_VALID_DINODE(fe)) {
- OCFS2_RO_ON_INVALID_DINODE(inode->i_sb, fe);
- retval = -EIO;
- goto bail;
- }
-
- if (fe->i_last_eb_blk)
- last_eb_blk = le64_to_cpu(fe->i_last_eb_blk);
- el = &fe->id2.i_list;
- } else if (type == OCFS2_XATTR_VALUE_EXTENT) {
- struct ocfs2_xattr_value_root *xv =
- (struct ocfs2_xattr_value_root *) obj;
-
- last_eb_blk = le64_to_cpu(xv->xr_last_eb_blk);
- el = &xv->xr_list;
- } else if (type == OCFS2_XATTR_TREE_EXTENT) {
- struct ocfs2_xattr_block *xb =
- (struct ocfs2_xattr_block *)root_bh->b_data;
-
- last_eb_blk = le64_to_cpu(xb->xb_attrs.xb_root.xt_last_eb_blk);
- el = &xb->xb_attrs.xb_root.xt_list;
- }
+ ocfs2_get_extent_tree(&et, inode, root_bh, type, obj);
+ el = et.et_root_el;
+ last_eb_blk = ocfs2_et_get_last_eb_blk(&et);
if (last_eb_blk) {
retval = ocfs2_read_block(osb, last_eb_blk,
@@ -665,6 +644,7 @@ bail:
if (eb_bh)
brelse(eb_bh);
+ ocfs2_put_extent_tree(&et);
mlog_exit(retval);
return retval;
}