[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200924145933.GG482521@mit.edu>
Date: Thu, 24 Sep 2020 10:59:33 -0400
From: "Theodore Y. Ts'o" <tytso@....edu>
To: Ye Bin <yebin10@...wei.com>
Cc: riteshh@...ux.ibm.com, jack@...e.cz, adilger.kernel@...ger.ca,
jack@...e.com, linux-ext4@...r.kernel.org
Subject: Re: [PATCH v5 2/2] ext4: Fix dead loop in ext4_mb_new_blocks
On Wed, Sep 16, 2020 at 07:38:59PM +0800, Ye Bin wrote:
> As we test disk offline/online with running fsstress, we find fsstress
> process is keeping running state.
> kworker/u32:3-262 [004] ...1 140.787471: ext4_mb_discard_preallocations: dev 8,32 needed 114
> ....
> kworker/u32:3-262 [004] ...1 140.787471: ext4_mb_discard_preallocations: dev 8,32 needed 114
>
> ext4_mb_new_blocks
> repeat:
> ext4_mb_discard_preallocations_should_retry(sb, ac, &seq)
> freed = ext4_mb_discard_preallocations
> ext4_mb_discard_group_preallocations
> this_cpu_inc(discard_pa_seq);
> ---> freed == 0
> seq_retry = ext4_get_discard_pa_seq_sum
> for_each_possible_cpu(__cpu)
> __seq += per_cpu(discard_pa_seq, __cpu);
> if (seq_retry != *seq) {
> *seq = seq_retry;
> ret = true;
> }
>
> As we see seq_retry is sum of discard_pa_seq every cpu, if
> ext4_mb_discard_group_preallocations return zero discard_pa_seq in this
> cpu maybe increase one, so condition "seq_retry != *seq" have always
> been met.
> Ritesh Harjani suggest to in ext4_mb_discard_group_preallocations function we
> only increase discard_pa_seq when there is some PA to free.
>
> Fixes: 07b5b8e1ac40 ("ext4: mballoc: introduce pcpu seqcnt for freeing PA to improve ENOSPC handling")
> Signed-off-by: Ye Bin <yebin10@...wei.com>
> Reviewed-by: Jan Kara <jack@...e.cz>
> Reviewed-by: Ritesh Harjani <riteshh@...ux.ibm.com>
Thanks, applied.
- Ted
Powered by blists - more mailing lists