Messages in this thread | ![/](/images/icornerl.gif) | | Subject | Re: [PATCH -next 2/3] md/raid10: convert resync_lock to use seqlock | From | Yu Kuai <> | Date | Fri, 2 Sep 2022 18:02:05 +0800 |
| |
Hi,
在 2022/09/02 17:42, Guoqing Jiang 写道: > Hi, > > On 8/29/22 9:15 PM, Yu Kuai wrote: >> +static bool wait_barrier_nolock(struct r10conf *conf) >> +{ >> + unsigned int seq = raw_read_seqcount(&conf->resync_lock.seqcount); >> + >> + if (seq & 1) >> + return false; >> + >> + if (READ_ONCE(conf->barrier)) >> + return false; >> + >> + atomic_inc(&conf->nr_pending); >> + if (!read_seqcount_retry(&conf->resync_lock.seqcount, seq)) > > I think 'seq' is usually get from read_seqcount_begin.
read_seqcount_begin will loop untill "req & 1" failed, I'm afraid this will cause high cpu usage in come cases.
What I try to do here is just try once, and fall back to hold lock and wait if failed.
What do you think?
Thanks, Kuai > >> + return true; >> + >> + atomic_dec(&conf->nr_pending); >> + return false; >> + > > Thanks, > Guoqing > . >
| ![\](/images/icornerr.gif) |