diff mbox series

[-next,v3,1/5] ext4: init 'seq' with the value which set in 'ext4_multi_mount_protect'

Message ID 20211019064959.625557-2-yebin10@huawei.com
State New
Headers show
Series Fix some issues about mmp | expand

Commit Message

yebin (H) Oct. 19, 2021, 6:49 a.m. UTC
If two host have the same nodename, and seq start from 0, May cause the
detection mechanism to fail.
So init 'seq' with the value which set in 'ext4_multi_mount_protect' to
accelerate conflict detection.

Signed-off-by: Ye Bin <yebin10@huawei.com>
---
 fs/ext4/mmp.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jan Kara Oct. 19, 2021, 8:53 a.m. UTC | #1
On Tue 19-10-21 14:49:55, Ye Bin wrote:
> If two host have the same nodename, and seq start from 0, May cause the
> detection mechanism to fail.
> So init 'seq' with the value which set in 'ext4_multi_mount_protect' to
> accelerate conflict detection.
> 
> Signed-off-by: Ye Bin <yebin10@huawei.com>

...

> @@ -143,6 +143,7 @@ static int kmmpd(void *data)
>  	mmp_block = le64_to_cpu(es->s_mmp_block);
>  	mmp = (struct mmp_struct *)(bh->b_data);
>  	mmp->mmp_time = cpu_to_le64(ktime_get_real_seconds());
> +	seq = le32_to_cpu(mmp->mmp_seq);
>  	/*
>  	 * Start with the higher mmp_check_interval and reduce it if
>  	 * the MMP block is being updated on time.

Thanks for the patch. After discussing what MMP guards against and what it
does not protect, I don't think this change is actually needed. Under
normal conditions we expect kmmpd() to only write to MMP block, checking of
MMP block is done only in ext4_multi_mount_protect(). And for checking
there to trigger, using 'seq' starting from 1 in kmmpd is enough...

								Honza
diff mbox series

Patch

diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
index cebea4270817..11627ff002d3 100644
--- a/fs/ext4/mmp.c
+++ b/fs/ext4/mmp.c
@@ -132,7 +132,7 @@  static int kmmpd(void *data)
 	struct buffer_head *bh = EXT4_SB(sb)->s_mmp_bh;
 	struct mmp_struct *mmp;
 	ext4_fsblk_t mmp_block;
-	u32 seq = 0;
+	u32 seq;
 	unsigned long failed_writes = 0;
 	int mmp_update_interval = le16_to_cpu(es->s_mmp_update_interval);
 	unsigned mmp_check_interval;
@@ -143,6 +143,7 @@  static int kmmpd(void *data)
 	mmp_block = le64_to_cpu(es->s_mmp_block);
 	mmp = (struct mmp_struct *)(bh->b_data);
 	mmp->mmp_time = cpu_to_le64(ktime_get_real_seconds());
+	seq = le32_to_cpu(mmp->mmp_seq);
 	/*
 	 * Start with the higher mmp_check_interval and reduce it if
 	 * the MMP block is being updated on time.