From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <56F0AE7C.9040204@hpe.com> Date: Mon, 21 Mar 2016 22:31:24 -0400 From: Waiman Long MIME-Version: 1.0 To: Jan Kara CC: Alexander Viro , Jan Kara , Jeff Layton , "J. Bruce Fields" , Tejun Heo , Christoph Lameter , , , Ingo Molnar , Peter Zijlstra , Andi Kleen , Dave Chinner , Boqun Feng , Scott J Norton , Douglas Hatch Subject: Re: [PATCH v6 1/4] lib/percpu-list: Per-cpu list with associated per-cpu locks References: <1458330244-46434-1-git-send-email-Waiman.Long@hpe.com> <1458330244-46434-2-git-send-email-Waiman.Long@hpe.com> <20160321094918.GG30819@quack.suse.cz> In-Reply-To: <20160321094918.GG30819@quack.suse.cz> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: On 03/21/2016 05:49 AM, Jan Kara wrote: > On Fri 18-03-16 15:44:01, Waiman Long wrote: >> +static __always_inline bool >> +__pcpu_list_next_cpu(struct pcpu_list_head *head, struct pcpu_list_state *state) >> +{ >> + if (state->lock) >> + spin_unlock(state->lock); >> +next_cpu: >> + /* >> + * for_each_possible_cpu(cpu) >> + */ >> + state->cpu = cpumask_next(state->cpu, cpu_possible_mask); >> + if (state->cpu>= nr_cpu_ids) >> + return false; /* All the per-cpu lists iterated */ >> + >> + state->head =&per_cpu_ptr(head, state->cpu)->list; >> + if (list_empty(state->head)) >> + goto next_cpu; >> + >> + state->lock =&per_cpu_ptr(head, state->cpu)->lock; >> + spin_lock(state->lock); >> + state->curr = list_entry(state->head->next, >> + struct pcpu_list_node, list); >> + return true; > Waiman, I repeat it for the third time as you keep ignoring it: This is > *racy*. The list for state->cpu can be empty by the time you acquire > state->lock and thus state->curr will point somewhere around the head of > the list but definitely not to a list member where it should. > > Honza I am sorry for missing your previous comment. Yes, it is possible that the list is empty after the lock. So I should have checked for that before returning. Thanks for reminding me that. I will fix that later on. Cheers, Longman