diff options
author | Joel Becker <joel.becker@oracle.com> | 2008-11-13 17:49:13 -0500 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2009-01-05 11:36:53 -0500 |
commit | 57e3e7971136003c96766346049aa73b82cab079 (patch) | |
tree | 4ba192d7507c77bc1bebd20ba6d82fbbe3da5428 /fs/ocfs2/resize.c | |
parent | 10995aa2451afa20b721cc7de856cae1a13dba57 (diff) |
ocfs2: Consolidate validation of group descriptors.
Currently the validation of group descriptors is directly duplicated so
that one version can error the filesystem and the other (resize) can
just report the problem. Consolidate to one function that takes a
boolean. Wrap that function with the old call for the old users.
This is in preparation for lifting the read+validate step into a
single function.
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/resize.c')
-rw-r--r-- | fs/ocfs2/resize.c | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/fs/ocfs2/resize.c b/fs/ocfs2/resize.c index 739d452f6174..a2de32a317ad 100644 --- a/fs/ocfs2/resize.c +++ b/fs/ocfs2/resize.c | |||
@@ -396,41 +396,16 @@ static int ocfs2_check_new_group(struct inode *inode, | |||
396 | struct buffer_head *group_bh) | 396 | struct buffer_head *group_bh) |
397 | { | 397 | { |
398 | int ret; | 398 | int ret; |
399 | struct ocfs2_group_desc *gd; | 399 | struct ocfs2_group_desc *gd = |
400 | (struct ocfs2_group_desc *)group_bh->b_data; | ||
400 | u16 cl_bpc = le16_to_cpu(di->id2.i_chain.cl_bpc); | 401 | u16 cl_bpc = le16_to_cpu(di->id2.i_chain.cl_bpc); |
401 | unsigned int max_bits = le16_to_cpu(di->id2.i_chain.cl_cpg) * | ||
402 | le16_to_cpu(di->id2.i_chain.cl_bpc); | ||
403 | 402 | ||
403 | ret = ocfs2_validate_group_descriptor(inode->i_sb, di, gd, 1); | ||
404 | if (ret) | ||
405 | goto out; | ||
404 | 406 | ||
405 | gd = (struct ocfs2_group_desc *)group_bh->b_data; | 407 | ret = -EINVAL; |
406 | 408 | if (le16_to_cpu(gd->bg_chain) != input->chain) | |
407 | ret = -EIO; | ||
408 | if (!OCFS2_IS_VALID_GROUP_DESC(gd)) | ||
409 | mlog(ML_ERROR, "Group descriptor # %llu isn't valid.\n", | ||
410 | (unsigned long long)le64_to_cpu(gd->bg_blkno)); | ||
411 | else if (di->i_blkno != gd->bg_parent_dinode) | ||
412 | mlog(ML_ERROR, "Group descriptor # %llu has bad parent " | ||
413 | "pointer (%llu, expected %llu)\n", | ||
414 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
415 | (unsigned long long)le64_to_cpu(gd->bg_parent_dinode), | ||
416 | (unsigned long long)le64_to_cpu(di->i_blkno)); | ||
417 | else if (le16_to_cpu(gd->bg_bits) > max_bits) | ||
418 | mlog(ML_ERROR, "Group descriptor # %llu has bit count of %u\n", | ||
419 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
420 | le16_to_cpu(gd->bg_bits)); | ||
421 | else if (le16_to_cpu(gd->bg_free_bits_count) > le16_to_cpu(gd->bg_bits)) | ||
422 | mlog(ML_ERROR, "Group descriptor # %llu has bit count %u but " | ||
423 | "claims that %u are free\n", | ||
424 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
425 | le16_to_cpu(gd->bg_bits), | ||
426 | le16_to_cpu(gd->bg_free_bits_count)); | ||
427 | else if (le16_to_cpu(gd->bg_bits) > (8 * le16_to_cpu(gd->bg_size))) | ||
428 | mlog(ML_ERROR, "Group descriptor # %llu has bit count %u but " | ||
429 | "max bitmap bits of %u\n", | ||
430 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
431 | le16_to_cpu(gd->bg_bits), | ||
432 | 8 * le16_to_cpu(gd->bg_size)); | ||
433 | else if (le16_to_cpu(gd->bg_chain) != input->chain) | ||
434 | mlog(ML_ERROR, "Group descriptor # %llu has bad chain %u " | 409 | mlog(ML_ERROR, "Group descriptor # %llu has bad chain %u " |
435 | "while input has %u set.\n", | 410 | "while input has %u set.\n", |
436 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | 411 | (unsigned long long)le64_to_cpu(gd->bg_blkno), |
@@ -449,6 +424,7 @@ static int ocfs2_check_new_group(struct inode *inode, | |||
449 | else | 424 | else |
450 | ret = 0; | 425 | ret = 0; |
451 | 426 | ||
427 | out: | ||
452 | return ret; | 428 | return ret; |
453 | } | 429 | } |
454 | 430 | ||