Re: [PATCH -next v3 5/5] ext4: avoid to re-read mmp check data get from page cache

From: Jan Kara
Date: Tue Oct 19 2021 - 05:10:32 EST


On Tue 19-10-21 14:49:59, Ye Bin wrote:
> As call read_mmp_block pass bh_check which value is NULL, then call
> sb_getblk to get buffer_head. But mmp_block's buffer_head is already exist
> which also is uptodate. Lead to compare the same data.
>
> Signed-off-by: Ye Bin <yebin10@xxxxxxxxxx>

This patch needs to go earlier in the series - just after patch 2.
Otherwise the read_mmp_block() cleanup is not correct. Otherwise it looks
good, just some language corrections:

ext4: remove useless bh_check variable

Since we initialize 'bh_check' to NULL and pass it to read_mmp_block(), that
function will just call sb_getblk() which will just return the buffer_head
we have in 'bh'. So just remove the pointless 'bh_check' variable and use
'bh' directly.

With this fixed feel free to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

Honza

> ---
> fs/ext4/mmp.c | 17 ++++++-----------
> 1 file changed, 6 insertions(+), 11 deletions(-)
>
> diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
> index 61c765c249b9..8018f6fb6ac2 100644
> --- a/fs/ext4/mmp.c
> +++ b/fs/ext4/mmp.c
> @@ -186,10 +186,7 @@ static int kmmpd(void *data)
> */
> diff = jiffies - last_update_time;
> if (diff > mmp_check_interval * HZ) {
> - struct buffer_head *bh_check = NULL;
> - struct mmp_struct *mmp_check;
> -
> - retval = read_mmp_block(sb, bh_check);
> + retval = read_mmp_block(sb, bh);
> if (retval) {
> ext4_error_err(sb, -retval,
> "error reading MMP data: %d",
> @@ -197,20 +194,18 @@ static int kmmpd(void *data)
> goto wait_to_exit;
> }
>
> - mmp_check = (struct mmp_struct *)(bh_check->b_data);
> - if (seq != mmp_check->mmp_seq ||
> - memcmp(nodename, mmp_check->mmp_nodename,
> - sizeof(mmp->mmp_nodename))) {
> - dump_mmp_msg(sb, mmp_check,
> + mmp = (struct mmp_struct *)(bh->b_data);
> + if (seq != le32_to_cpu(mmp->mmp_seq) ||
> + memcmp(nodename, mmp->mmp_nodename,
> + sizeof(nodename))) {
> + dump_mmp_msg(sb, mmp,
> "Error while updating MMP info. "
> "The filesystem seems to have been"
> " multiply mounted.");
> ext4_error_err(sb, EBUSY, "abort");
> - put_bh(bh_check);
> retval = -EBUSY;
> goto wait_to_exit;
> }
> - put_bh(bh_check);
> }
>
> /*
> --
> 2.31.1
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR