Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98104468 authored by Dan Carpenter's avatar Dan Carpenter Committed by Theodore Ts'o
Browse files

ext4: simplify some code in read_mmp_block()



My static check complains because we have:

	if (!*bh)
		return -ENOMEM;
	if (*bh) {

The second check is unnecessary.

I've simplified this code by moving the "if (!*bh)" checks around.  Also
Andreas Dilger says we should probably print a warning if sb_getblk()
fails.

[ Restructured the code so that we print a warning message as well if
  the mmp block doesn't check out, and to print the error code to
  disambiguate between the error cases.  - TYT ]

Reviewed-by: default avatarAndreas Dilger <adilger@dilger.ca>
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent c642dc9e
Loading
Loading
Loading
Loading
+25 −21
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ static int read_mmp_block(struct super_block *sb, struct buffer_head **bh,
			  ext4_fsblk_t mmp_block)
{
	struct mmp_struct *mmp;
	int ret;

	if (*bh)
		clear_buffer_uptodate(*bh);
@@ -76,11 +77,14 @@ static int read_mmp_block(struct super_block *sb, struct buffer_head **bh,
	/* This would be sb_bread(sb, mmp_block), except we need to be sure
	 * that the MD RAID device cache has been bypassed, and that the read
	 * is not blocked in the elevator. */
	if (!*bh)
	if (!*bh) {
		*bh = sb_getblk(sb, mmp_block);
	if (!*bh)
		return -ENOMEM;
	if (*bh) {
		if (!*bh) {
			ret = -ENOMEM;
			goto warn_exit;
		}
	}

	get_bh(*bh);
	lock_buffer(*bh);
	(*bh)->b_end_io = end_buffer_read_sync;
@@ -89,20 +93,20 @@ static int read_mmp_block(struct super_block *sb, struct buffer_head **bh,
	if (!buffer_uptodate(*bh)) {
		brelse(*bh);
		*bh = NULL;
		}
	}
	if (unlikely(!*bh)) {
		ext4_warning(sb, "Error while reading MMP block %llu",
			     mmp_block);
		return -EIO;
		ret = -EIO;
		goto warn_exit;
	}

	mmp = (struct mmp_struct *)((*bh)->b_data);
	if (le32_to_cpu(mmp->mmp_magic) != EXT4_MMP_MAGIC ||
	    !ext4_mmp_csum_verify(sb, mmp))
		return -EINVAL;

	if (le32_to_cpu(mmp->mmp_magic) == EXT4_MMP_MAGIC &&
	    ext4_mmp_csum_verify(sb, mmp))
		return 0;
	ret = -EINVAL;

warn_exit:
	ext4_warning(sb, "Error %d while reading MMP block %llu",
		     ret, mmp_block);
	return ret;
}

/*