Re: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets enospace
Hi Tachibana, Thanks for your reply. And I do appreciate Kumagai-san's help these years. On 02/16/2018 10:45 AM, Masaki Tachibana wrote: Hi, Atsushi Kumagai has retired, so other members will maintain makedumpfile. Wenjian Sorry for the late reply. Your patch looks good to me. I'll merge it into V1.6.4. Thanks tachibana -Original Message- From: kexec [mailto:kexec-boun...@lists.infradead.org] On Behalf Of Zhou Wenjian Sent: Thursday, February 08, 2018 8:53 PM To: kexec@lists.infradead.org Cc: Kumagai Atsushi() ; Suzuki Keiichirou() Subject: Re: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets enospace ping... On 01/29/2018 08:54 PM, Zhou Wenjian wrote: Currently, when multi-threads feature meets enospace error, the main thread will call pthread_join(). However, there is one thread doing while{} and won't stop. pthread_mutex_lock(&info->page_data_mutex); while (page_data_buf[index].used != FALSE) { index = (index + 1) % info->num_buffers; } page_data_buf[index].used = TRUE; pthread_mutex_unlock(&info->page_data_mutex); Then makedumpfile hangs. This patch add a cancel point in while{}. Signed-off-by: Zhou Wenjian --- makedumpfile.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/makedumpfile.c b/makedumpfile.c index ed138d3..f7ad50c 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -7731,11 +7731,13 @@ kdump_thread_function_cyclic(void *arg) { buf_ready = FALSE; pthread_mutex_lock(&info->page_data_mutex); + pthread_cleanup_push(pthread_mutex_unlock, &info->page_data_mutex); while (page_data_buf[index].used != FALSE) { + pthread_testcancel(); index = (index + 1) % info->num_buffers; } page_data_buf[index].used = TRUE; - pthread_mutex_unlock(&info->page_data_mutex); + pthread_cleanup_pop(1); while (buf_ready == FALSE) { pthread_testcancel(); -- Thanks Zhou ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec -- Thanks Zhou ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
RE: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets enospace
Hi, Atsushi Kumagai has retired, so other members will maintain makedumpfile. Wenjian Sorry for the late reply. Your patch looks good to me. I'll merge it into V1.6.4. Thanks tachibana > -Original Message- > From: kexec [mailto:kexec-boun...@lists.infradead.org] On Behalf Of Zhou > Wenjian > Sent: Thursday, February 08, 2018 8:53 PM > To: kexec@lists.infradead.org > Cc: Kumagai Atsushi() ; Suzuki Keiichirou() > > Subject: Re: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets > enospace > > ping... > > > On 01/29/2018 08:54 PM, Zhou Wenjian wrote: > > Currently, when multi-threads feature meets enospace error, > > the main thread will call pthread_join(). However, there is one > > thread doing while{} and won't stop. > > > > pthread_mutex_lock(&info->page_data_mutex); > > while (page_data_buf[index].used != FALSE) { > > index = (index + 1) % info->num_buffers; > > } > > page_data_buf[index].used = TRUE; > > pthread_mutex_unlock(&info->page_data_mutex); > > > > Then makedumpfile hangs. > > > > This patch add a cancel point in while{}. > > > > Signed-off-by: Zhou Wenjian > > --- > > makedumpfile.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/makedumpfile.c b/makedumpfile.c > > index ed138d3..f7ad50c 100644 > > --- a/makedumpfile.c > > +++ b/makedumpfile.c > > @@ -7731,11 +7731,13 @@ kdump_thread_function_cyclic(void *arg) { > > buf_ready = FALSE; > > > > pthread_mutex_lock(&info->page_data_mutex); > > + pthread_cleanup_push(pthread_mutex_unlock, > > &info->page_data_mutex); > > while (page_data_buf[index].used != FALSE) { > > + pthread_testcancel(); > > index = (index + 1) % info->num_buffers; > > } > > page_data_buf[index].used = TRUE; > > - pthread_mutex_unlock(&info->page_data_mutex); > > + pthread_cleanup_pop(1); > > > > while (buf_ready == FALSE) { > > pthread_testcancel(); > > -- > Thanks > Zhou > > > ___ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
RE: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets enospace
Hi Zhou-san I will forward Tachibana's mail. Thank you >-Original Message- >From: Hayashi Masahiko(林 正彦) >Sent: Friday, February 09, 2018 8:24 PM >To: Zhou Wenjian >Cc: kexec@lists.infradead.org >Subject: FW: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets >enospace > >>-Original Message- >>From: Tachibana Masaki(橘 正樹) >>Sent: Friday, February 09, 2018 8:05 PM >>To: Zhou Wenjian >>Cc: kexec@lists.infradead.org; Hayashi Masahiko(林 正彦) >> >>Subject: RE: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets >>enospace >> >>Hi Zhou, >> >>Sorry for the late reply. >>Makedumpfile team are busy now for another development. >>I'll reply in about a week. >> >>Thanks >>tachibana >> >>> -Original Message- >>> From: kexec [mailto:kexec-boun...@lists.infradead.org] On Behalf Of Zhou >>> Wenjian >>> Sent: Thursday, February 08, 2018 8:53 PM >>> To: kexec@lists.infradead.org >>> Cc: Kumagai Atsushi ; Suzuki Keiichirou >>> >>> Subject: Re: [PATCH] makedumpfile: Fix a bug when multi-threads feature >>> meets enospace >>> >>> ping... >>> >>> >>> On 01/29/2018 08:54 PM, Zhou Wenjian wrote: >>> > Currently, when multi-threads feature meets enospace error, >>> > the main thread will call pthread_join(). However, there is one >>> > thread doing while{} and won't stop. >>> > >>> > pthread_mutex_lock(&info->page_data_mutex); >>> > while (page_data_buf[index].used != FALSE) { >>> > index = (index + 1) % info->num_buffers; >>> > } >>> > page_data_buf[index].used = TRUE; >>> > pthread_mutex_unlock(&info->page_data_mutex); >>> > >>> > Then makedumpfile hangs. >>> > >>> > This patch add a cancel point in while{}. >>> > >>> > Signed-off-by: Zhou Wenjian >>> > --- >>> > makedumpfile.c | 4 +++- >>> > 1 file changed, 3 insertions(+), 1 deletion(-) >>> > >>> > diff --git a/makedumpfile.c b/makedumpfile.c >>> > index ed138d3..f7ad50c 100644 >>> > --- a/makedumpfile.c >>> > +++ b/makedumpfile.c >>> > @@ -7731,11 +7731,13 @@ kdump_thread_function_cyclic(void *arg) { >>> > buf_ready = FALSE; >>> > >>> > pthread_mutex_lock(&info->page_data_mutex); >>> > + pthread_cleanup_push(pthread_mutex_unlock, >>> > &info->page_data_mutex); >>> > while (page_data_buf[index].used != FALSE) { >>> > + pthread_testcancel(); >>> > index = (index + 1) % info->num_buffers; >>> > } >>> > page_data_buf[index].used = TRUE; >>> > - pthread_mutex_unlock(&info->page_data_mutex); >>> > + pthread_cleanup_pop(1); >>> > >>> > while (buf_ready == FALSE) { >>> > pthread_testcancel(); >>> >>> -- >>> Thanks >>> Zhou >>> >>> >>> ___ >>> kexec mailing list >>> kexec@lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/kexec ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCH] makedumpfile: Fix a bug when multi-threads feature meets enospace
ping... On 01/29/2018 08:54 PM, Zhou Wenjian wrote: Currently, when multi-threads feature meets enospace error, the main thread will call pthread_join(). However, there is one thread doing while{} and won't stop. pthread_mutex_lock(&info->page_data_mutex); while (page_data_buf[index].used != FALSE) { index = (index + 1) % info->num_buffers; } page_data_buf[index].used = TRUE; pthread_mutex_unlock(&info->page_data_mutex); Then makedumpfile hangs. This patch add a cancel point in while{}. Signed-off-by: Zhou Wenjian --- makedumpfile.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/makedumpfile.c b/makedumpfile.c index ed138d3..f7ad50c 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -7731,11 +7731,13 @@ kdump_thread_function_cyclic(void *arg) { buf_ready = FALSE; pthread_mutex_lock(&info->page_data_mutex); + pthread_cleanup_push(pthread_mutex_unlock, &info->page_data_mutex); while (page_data_buf[index].used != FALSE) { + pthread_testcancel(); index = (index + 1) % info->num_buffers; } page_data_buf[index].used = TRUE; - pthread_mutex_unlock(&info->page_data_mutex); + pthread_cleanup_pop(1); while (buf_ready == FALSE) { pthread_testcancel(); -- Thanks Zhou ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec