Commit 42035306 authored by Joel Becker's avatar Joel Becker Committed by Mark Fasheh

ocfs2: Morph the haphazard OCFS2_IS_VALID_GROUP_DESC() checks.

Random places in the code would check a group descriptor bh to see if it
was valid. The previous commit unified descriptor block reads,
validating all block reads in the same place.  Thus, these checks are no
longer necessary.  Rather than eliminate them, however, we change them
to BUG_ON() checks.  This ensures the assumptions remain true.  All of
the code paths to these checks have been audited to ensure they come
from a validated descriptor read.
Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
parent 68f64d47
...@@ -458,13 +458,6 @@ static inline int ocfs2_uses_extended_slot_map(struct ocfs2_super *osb) ...@@ -458,13 +458,6 @@ static inline int ocfs2_uses_extended_slot_map(struct ocfs2_super *osb)
#define OCFS2_IS_VALID_GROUP_DESC(ptr) \ #define OCFS2_IS_VALID_GROUP_DESC(ptr) \
(!strcmp((ptr)->bg_signature, OCFS2_GROUP_DESC_SIGNATURE)) (!strcmp((ptr)->bg_signature, OCFS2_GROUP_DESC_SIGNATURE))
#define OCFS2_RO_ON_INVALID_GROUP_DESC(__sb, __gd) do { \
typeof(__gd) ____gd = (__gd); \
ocfs2_error((__sb), \
"Group Descriptor # %llu has bad signature %.*s", \
(unsigned long long)le64_to_cpu((____gd)->bg_blkno), 7, \
(____gd)->bg_signature); \
} while (0)
#define OCFS2_IS_VALID_XATTR_BLOCK(ptr) \ #define OCFS2_IS_VALID_XATTR_BLOCK(ptr) \
(!strcmp((ptr)->xb_signature, OCFS2_XATTR_BLOCK_SIGNATURE)) (!strcmp((ptr)->xb_signature, OCFS2_XATTR_BLOCK_SIGNATURE))
......
...@@ -842,10 +842,9 @@ static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb, ...@@ -842,10 +842,9 @@ static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
int offset, start, found, status = 0; int offset, start, found, status = 0;
struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data; struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data;
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) { /* Callers got this descriptor from
OCFS2_RO_ON_INVALID_GROUP_DESC(osb->sb, bg); * ocfs2_read_group_descriptor(). Any corruption is a code bug. */
return -EIO; BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg));
}
found = start = best_offset = best_size = 0; found = start = best_offset = best_size = 0;
bitmap = bg->bg_bitmap; bitmap = bg->bg_bitmap;
...@@ -910,11 +909,9 @@ static inline int ocfs2_block_group_set_bits(handle_t *handle, ...@@ -910,11 +909,9 @@ static inline int ocfs2_block_group_set_bits(handle_t *handle,
mlog_entry_void(); mlog_entry_void();
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) { /* All callers get the descriptor via
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg); * ocfs2_read_group_descriptor(). Any corruption is a code bug. */
status = -EIO; BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg));
goto bail;
}
BUG_ON(le16_to_cpu(bg->bg_free_bits_count) < num_bits); BUG_ON(le16_to_cpu(bg->bg_free_bits_count) < num_bits);
mlog(0, "block_group_set_bits: off = %u, num = %u\n", bit_off, mlog(0, "block_group_set_bits: off = %u, num = %u\n", bit_off,
...@@ -983,16 +980,10 @@ static int ocfs2_relink_block_group(handle_t *handle, ...@@ -983,16 +980,10 @@ static int ocfs2_relink_block_group(handle_t *handle,
struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data; struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data;
struct ocfs2_group_desc *prev_bg = (struct ocfs2_group_desc *) prev_bg_bh->b_data; struct ocfs2_group_desc *prev_bg = (struct ocfs2_group_desc *) prev_bg_bh->b_data;
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) { /* The caller got these descriptors from
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg); * ocfs2_read_group_descriptor(). Any corruption is a code bug. */
status = -EIO; BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg));
goto out; BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(prev_bg));
}
if (!OCFS2_IS_VALID_GROUP_DESC(prev_bg)) {
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, prev_bg);
status = -EIO;
goto out;
}
mlog(0, "Suballoc %llu, chain %u, move group %llu to top, prev = %llu\n", mlog(0, "Suballoc %llu, chain %u, move group %llu to top, prev = %llu\n",
(unsigned long long)le64_to_cpu(fe->i_blkno), chain, (unsigned long long)le64_to_cpu(fe->i_blkno), chain,
...@@ -1055,7 +1046,7 @@ static int ocfs2_relink_block_group(handle_t *handle, ...@@ -1055,7 +1046,7 @@ static int ocfs2_relink_block_group(handle_t *handle,
bg->bg_next_group = cpu_to_le64(bg_ptr); bg->bg_next_group = cpu_to_le64(bg_ptr);
prev_bg->bg_next_group = cpu_to_le64(prev_bg_ptr); prev_bg->bg_next_group = cpu_to_le64(prev_bg_ptr);
} }
out:
mlog_exit(status); mlog_exit(status);
return status; return status;
} }
...@@ -1758,11 +1749,9 @@ static inline int ocfs2_block_group_clear_bits(handle_t *handle, ...@@ -1758,11 +1749,9 @@ static inline int ocfs2_block_group_clear_bits(handle_t *handle,
mlog_entry_void(); mlog_entry_void();
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) { /* The caller got this descriptor from
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg); * ocfs2_read_group_descriptor(). Any corruption is a code bug. */
status = -EIO; BUG_ON(!OCFS2_IS_VALID_GROUP_DESC(bg));
goto bail;
}
mlog(0, "off = %u, num = %u\n", bit_off, num_bits); mlog(0, "off = %u, num = %u\n", bit_off, num_bits);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment