diff options
author | Joel Becker <joel.becker@oracle.com> | 2008-11-13 17:49:16 -0500 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2009-01-05 11:36:53 -0500 |
commit | 5e96581a377fc6bd76e9b112da9aeb8a7ae8bf22 (patch) | |
tree | ce2e1d8819b6020567828ca9021438c0824aa8d4 /fs/ocfs2/extent_map.c | |
parent | 4203530613280281868b3ca36c817530bca3825c (diff) |
ocfs2: Wrap extent block reads in a dedicated function.
We weren't consistently checking extent blocks after we read them.
Most places checked the signature, but none checked h_blkno or
h_fs_signature. Create a toplevel ocfs2_read_extent_block() that does
the read and the validation.
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/extent_map.c')
-rw-r--r-- | fs/ocfs2/extent_map.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c index b686b31cf49c..0bd9d9698a24 100644 --- a/fs/ocfs2/extent_map.c +++ b/fs/ocfs2/extent_map.c | |||
@@ -293,7 +293,7 @@ static int ocfs2_last_eb_is_empty(struct inode *inode, | |||
293 | struct ocfs2_extent_block *eb; | 293 | struct ocfs2_extent_block *eb; |
294 | struct ocfs2_extent_list *el; | 294 | struct ocfs2_extent_list *el; |
295 | 295 | ||
296 | ret = ocfs2_read_block(inode, last_eb_blk, &eb_bh); | 296 | ret = ocfs2_read_extent_block(inode, last_eb_blk, &eb_bh); |
297 | if (ret) { | 297 | if (ret) { |
298 | mlog_errno(ret); | 298 | mlog_errno(ret); |
299 | goto out; | 299 | goto out; |
@@ -302,12 +302,6 @@ static int ocfs2_last_eb_is_empty(struct inode *inode, | |||
302 | eb = (struct ocfs2_extent_block *) eb_bh->b_data; | 302 | eb = (struct ocfs2_extent_block *) eb_bh->b_data; |
303 | el = &eb->h_list; | 303 | el = &eb->h_list; |
304 | 304 | ||
305 | if (!OCFS2_IS_VALID_EXTENT_BLOCK(eb)) { | ||
306 | ret = -EROFS; | ||
307 | OCFS2_RO_ON_INVALID_EXTENT_BLOCK(inode->i_sb, eb); | ||
308 | goto out; | ||
309 | } | ||
310 | |||
311 | if (el->l_tree_depth) { | 305 | if (el->l_tree_depth) { |
312 | ocfs2_error(inode->i_sb, | 306 | ocfs2_error(inode->i_sb, |
313 | "Inode %lu has non zero tree depth in " | 307 | "Inode %lu has non zero tree depth in " |
@@ -381,23 +375,16 @@ static int ocfs2_figure_hole_clusters(struct inode *inode, | |||
381 | if (le64_to_cpu(eb->h_next_leaf_blk) == 0ULL) | 375 | if (le64_to_cpu(eb->h_next_leaf_blk) == 0ULL) |
382 | goto no_more_extents; | 376 | goto no_more_extents; |
383 | 377 | ||
384 | ret = ocfs2_read_block(inode, | 378 | ret = ocfs2_read_extent_block(inode, |
385 | le64_to_cpu(eb->h_next_leaf_blk), | 379 | le64_to_cpu(eb->h_next_leaf_blk), |
386 | &next_eb_bh); | 380 | &next_eb_bh); |
387 | if (ret) { | 381 | if (ret) { |
388 | mlog_errno(ret); | 382 | mlog_errno(ret); |
389 | goto out; | 383 | goto out; |
390 | } | 384 | } |
391 | next_eb = (struct ocfs2_extent_block *)next_eb_bh->b_data; | ||
392 | |||
393 | if (!OCFS2_IS_VALID_EXTENT_BLOCK(next_eb)) { | ||
394 | ret = -EROFS; | ||
395 | OCFS2_RO_ON_INVALID_EXTENT_BLOCK(inode->i_sb, next_eb); | ||
396 | goto out; | ||
397 | } | ||
398 | 385 | ||
386 | next_eb = (struct ocfs2_extent_block *)next_eb_bh->b_data; | ||
399 | el = &next_eb->h_list; | 387 | el = &next_eb->h_list; |
400 | |||
401 | i = ocfs2_search_for_hole_index(el, v_cluster); | 388 | i = ocfs2_search_for_hole_index(el, v_cluster); |
402 | } | 389 | } |
403 | 390 | ||