public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
@ 2007-06-14 13:09 Uli Luckas
  2007-06-19  9:49 ` Uli Luckas
  2007-06-28 18:52 ` [PATCH] " David Woodhouse
  0 siblings, 2 replies; 12+ messages in thread
From: Uli Luckas @ 2007-06-14 13:09 UTC (permalink / raw)
  To: linux-mtd

Hi
We experience the following problem when our board tries to suspend:

Jun  7 18:32:21 constin kernel: [ 2085.350000] Stopping tasks ... 
Jun  7 18:32:21 constin kernel: [ 2105.410000] Stopping kernel threads timed 
out after 20 seconds (1 tasks refusing to freeze):
Jun  7 18:32:21 constin kernel: [ 2105.410000]  jffs2_gcd_mtd3
Jun  7 18:32:21 constin kernel: [ 2105.410000] Restarting tasks ... <4> 
Strange, jffs2_gcd_mtd3 not stopped
Jun  7 18:32:21 constin kernel: [ 2105.440000] done.

The problem seems to happen, when suspend kicks in, after the call to 
try_to_freeze and before the while loop in jffs2_garbage_collect_thread.

The pending freeze will cause signal_pending to return true until the 
attempted suspend is over and thereby the while loop won't terminate until 
the suspend times out.

This patch will call try_to_freeze from within the while loop and adds an 
extra check for jffs2_thread_should_wake before we actually do the GC to 
avoid calling jffs2_garbage_collect_pass at every wakeup.

If there are no objections, please apply and push to mainline.

Signed-off-by: Uli Luckas <u.luckas@road.de>

diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
index 888f236..f953824 100644
--- a/fs/jffs2/background.c
+++ b/fs/jffs2/background.c
@@ -96,9 +96,6 @@ static int jffs2_garbage_collect_thread(void *_c)
                        schedule();
                }
 
-               if (try_to_freeze())
-                       continue;
-
                /* This thread is purely an optimisation. But if it runs when
                   other things could be running, it actually makes things a
                   lot worse. Use yield() and put it at the back of the runqueue
@@ -113,6 +110,9 @@ static int jffs2_garbage_collect_thread(void *_c)
                        siginfo_t info;
                        unsigned long signr;
 
+                       if (try_to_freeze())
+                               continue;
+
                        signr = dequeue_signal_lock(current, &current->blocked, &info);
 
                        switch(signr) {
@@ -137,7 +137,8 @@ static int jffs2_garbage_collect_thread(void *_c)
                disallow_signal(SIGHUP);
 
                D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): pass\n"));
-               if (jffs2_garbage_collect_pass(c) == -ENOSPC) {
+               if (   jffs2_thread_should_wake(c) 
+                   && jffs2_garbage_collect_pass(c) == -ENOSPC) {
                        printk(KERN_NOTICE "No space for garbage collection. Aborting GC thread\n");
                        goto die;
                }

-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-14 13:09 [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out Uli Luckas
@ 2007-06-19  9:49 ` Uli Luckas
  2007-06-26 13:06   ` Uli Luckas
  2007-06-28 18:52 ` [PATCH] " David Woodhouse
  1 sibling, 1 reply; 12+ messages in thread
From: Uli Luckas @ 2007-06-19  9:49 UTC (permalink / raw)
  To: linux-mtd

Hi,
is there anything in the way of apllying this patch?

Regards
Uli


On Thursday, 14. June 2007, Uli Luckas wrote:
> Hi
> We experience the following problem when our board tries to suspend:
>
> Jun  7 18:32:21 constin kernel: [ 2085.350000] Stopping tasks ...
> Jun  7 18:32:21 constin kernel: [ 2105.410000] Stopping kernel threads
> timed out after 20 seconds (1 tasks refusing to freeze):
> Jun  7 18:32:21 constin kernel: [ 2105.410000]  jffs2_gcd_mtd3
> Jun  7 18:32:21 constin kernel: [ 2105.410000] Restarting tasks ... <4>
> Strange, jffs2_gcd_mtd3 not stopped
> Jun  7 18:32:21 constin kernel: [ 2105.440000] done.
>
> The problem seems to happen, when suspend kicks in, after the call to
> try_to_freeze and before the while loop in jffs2_garbage_collect_thread.
>
> The pending freeze will cause signal_pending to return true until the
> attempted suspend is over and thereby the while loop won't terminate until
> the suspend times out.
>
> This patch will call try_to_freeze from within the while loop and adds an
> extra check for jffs2_thread_should_wake before we actually do the GC to
> avoid calling jffs2_garbage_collect_pass at every wakeup.
>
> If there are no objections, please apply and push to mainline.
>
> Signed-off-by: Uli Luckas <u.luckas@road.de>
>
> diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
> index 888f236..f953824 100644
> --- a/fs/jffs2/background.c
> +++ b/fs/jffs2/background.c
> @@ -96,9 +96,6 @@ static int jffs2_garbage_collect_thread(void *_c)
>                         schedule();
>                 }
>  
> -               if (try_to_freeze())
> -                       continue;
> -
>                 /* This thread is purely an optimisation. But if it runs
> when other things could be running, it actually makes things a lot worse.
> Use yield() and put it at the back of the runqueue @@ -113,6 +110,9 @@
> static int jffs2_garbage_collect_thread(void *_c) siginfo_t info;
>                         unsigned long signr;
>  
> +                       if (try_to_freeze())
> +                               continue;
> +
>                         signr = dequeue_signal_lock(current,
> &current->blocked, &info); 
>                         switch(signr) {
> @@ -137,7 +137,8 @@ static int jffs2_garbage_collect_thread(void *_c)
>                 disallow_signal(SIGHUP);
>  
>                 D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread():
> pass\n")); -               if (jffs2_garbage_collect_pass(c) == -ENOSPC) {
> +               if (   jffs2_thread_should_wake(c)
> +                   && jffs2_garbage_collect_pass(c) == -ENOSPC) {
>                         printk(KERN_NOTICE "No space for garbage
> collection. Aborting GC thread\n"); goto die;
>                 }



-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-19  9:49 ` Uli Luckas
@ 2007-06-26 13:06   ` Uli Luckas
  2007-06-26 13:19     ` Josh Boyer
  0 siblings, 1 reply; 12+ messages in thread
From: Uli Luckas @ 2007-06-26 13:06 UTC (permalink / raw)
  To: linux-mtd; +Cc: David Woodhouse

On Tuesday, 19. June 2007, Uli Luckas wrote:
> Hi,
> is there anything in the way of apllying this patch?
>
Please, can someone tell me what it takes to get a jffs2 bug fix into the 
kernel? Or even reviewed? This patch should even get into 2.6.22. Am I doing 
something wrong here?

Regards
Uli

> Regards
> Uli
>
> On Thursday, 14. June 2007, Uli Luckas wrote:
> > Hi
> > We experience the following problem when our board tries to suspend:
> >
> > Jun  7 18:32:21 constin kernel: [ 2085.350000] Stopping tasks ...
> > Jun  7 18:32:21 constin kernel: [ 2105.410000] Stopping kernel threads
> > timed out after 20 seconds (1 tasks refusing to freeze):
> > Jun  7 18:32:21 constin kernel: [ 2105.410000]  jffs2_gcd_mtd3
> > Jun  7 18:32:21 constin kernel: [ 2105.410000] Restarting tasks ... <4>
> > Strange, jffs2_gcd_mtd3 not stopped
> > Jun  7 18:32:21 constin kernel: [ 2105.440000] done.
> >
> > The problem seems to happen, when suspend kicks in, after the call to
> > try_to_freeze and before the while loop in jffs2_garbage_collect_thread.
> >
> > The pending freeze will cause signal_pending to return true until the
> > attempted suspend is over and thereby the while loop won't terminate
> > until the suspend times out.
> >
> > This patch will call try_to_freeze from within the while loop and adds an
> > extra check for jffs2_thread_should_wake before we actually do the GC to
> > avoid calling jffs2_garbage_collect_pass at every wakeup.
> >
> > If there are no objections, please apply and push to mainline.
> >
> > Signed-off-by: Uli Luckas <u.luckas@road.de>
> >
> > diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
> > index 888f236..f953824 100644
> > --- a/fs/jffs2/background.c
> > +++ b/fs/jffs2/background.c
> > @@ -96,9 +96,6 @@ static int jffs2_garbage_collect_thread(void *_c)
> >                         schedule();
> >                 }
> >  
> > -               if (try_to_freeze())
> > -                       continue;
> > -
> >                 /* This thread is purely an optimisation. But if it runs
> > when other things could be running, it actually makes things a lot worse.
> > Use yield() and put it at the back of the runqueue @@ -113,6 +110,9 @@
> > static int jffs2_garbage_collect_thread(void *_c) siginfo_t info;
> >                         unsigned long signr;
> >  
> > +                       if (try_to_freeze())
> > +                               continue;
> > +
> >                         signr = dequeue_signal_lock(current,
> > &current->blocked, &info);
> >                         switch(signr) {
> > @@ -137,7 +137,8 @@ static int jffs2_garbage_collect_thread(void *_c)
> >                 disallow_signal(SIGHUP);
> >  
> >                 D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread():
> > pass\n")); -               if (jffs2_garbage_collect_pass(c) == -ENOSPC)
> > { +               if (   jffs2_thread_should_wake(c)
> > +                   && jffs2_garbage_collect_pass(c) == -ENOSPC) {
> >                         printk(KERN_NOTICE "No space for garbage
> > collection. Aborting GC thread\n"); goto die;
> >                 }



-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-26 13:06   ` Uli Luckas
@ 2007-06-26 13:19     ` Josh Boyer
  2007-06-26 15:34       ` Uli Luckas
       [not found]       ` <200706261639.49486.u.luckas@road.de>
  0 siblings, 2 replies; 12+ messages in thread
From: Josh Boyer @ 2007-06-26 13:19 UTC (permalink / raw)
  To: Uli Luckas; +Cc: David Woodhouse, linux-mtd

On Tue, 2007-06-26 at 15:06 +0200, Uli Luckas wrote:
> On Tuesday, 19. June 2007, Uli Luckas wrote:
> > Hi,
> > is there anything in the way of apllying this patch?
> >
> Please, can someone tell me what it takes to get a jffs2 bug fix into the 
> kernel? Or even reviewed? This patch should even get into 2.6.22. Am I doing 
> something wrong here?

You aren't doing anything wrong.  David is away on business.

The one thing I would hesitate with about your patch is that you've now
broken the existing behavior of the thread in regards to SIGHUP.  You
used to be able to send the threads a SIGHUP and it would do a single
pass.  With your patch, it won't do that unless the thresholds are
right.  Being able to send SIGHUP to force a GC pass is a pretty useful
thing for debugging, etc.

josh

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-26 13:19     ` Josh Boyer
@ 2007-06-26 15:34       ` Uli Luckas
       [not found]       ` <200706261639.49486.u.luckas@road.de>
  1 sibling, 0 replies; 12+ messages in thread
From: Uli Luckas @ 2007-06-26 15:34 UTC (permalink / raw)
  To: linux-mtd; +Cc: David Woodhouse

On Tuesday, 26. June 2007, Josh Boyer wrote:
> On Tue, 2007-06-26 at 15:06 +0200, Uli Luckas wrote:
> > On Tuesday, 19. June 2007, Uli Luckas wrote:
> > > Hi,
> > > is there anything in the way of apllying this patch?
> >
> > Please, can someone tell me what it takes to get a jffs2 bug fix into the
> > kernel? Or even reviewed? This patch should even get into 2.6.22. Am I
> > doing something wrong here?
>
> You aren't doing anything wrong.  David is away on business.
>
does that mean, we won't get any fixes applied, before David is back? And does 
anyone know, when he will be back?

> The one thing I would hesitate with about your patch is that you've now
> broken the existing behavior of the thread in regards to SIGHUP.  You
> used to be able to send the threads a SIGHUP and it would do a single
> pass.  With your patch, it won't do that unless the thresholds are
> right.  Being able to send SIGHUP to force a GC pass is a pretty useful
> thing for debugging, etc.
>
thanks Josh, alot for reviewing the patch. Following your advise, I force GC 
now, if SIGHUP was received.
The patch still introduces a change in sematics though for all other signals 
(except SIGKILL). But I feel, the new behavior is more what one would expect. 
In case, the old behavior is desired, it is simple enough to set force_gc in 
the coresponding branches.

regards,
Uli

Signed-off-by: Uli Luckas <u.luckas@road.de>

diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
index 888f236..1843786 100644
--- a/fs/jffs2/background.c
+++ b/fs/jffs2/background.c
@@ -71,6 +71,7 @@ void jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c)
 
 static int jffs2_garbage_collect_thread(void *_c)
 {
+	int force_gc;
 	struct jffs2_sb_info *c = _c;
 
 	daemonize("jffs2_gcd_mtd%d", c->mtd->index);
@@ -96,9 +97,6 @@ static int jffs2_garbage_collect_thread(void *_c)
 			schedule();
 		}
 
-		if (try_to_freeze())
-			continue;
-
 		/* This thread is purely an optimisation. But if it runs when
 		   other things could be running, it actually makes things a
 		   lot worse. Use yield() and put it at the back of the runqueue
@@ -109,10 +107,14 @@ static int jffs2_garbage_collect_thread(void *_c)
 
 		/* Put_super will send a SIGKILL and then wait on the sem.
 		 */
+		force_gc = 0;
 		while (signal_pending(current)) {
 			siginfo_t info;
 			unsigned long signr;
 
+			if (try_to_freeze())
+				continue;
+
 			signr = dequeue_signal_lock(current, &current->blocked, &info);
 
 			switch(signr) {
@@ -128,6 +130,7 @@ static int jffs2_garbage_collect_thread(void *_c)
 
 			case SIGHUP:
 				D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): SIGHUP received.\n"));
+				force_gc = 1;
 				break;
 			default:
 				D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): signal %ld received\n", signr));
@@ -137,7 +140,8 @@ static int jffs2_garbage_collect_thread(void *_c)
 		disallow_signal(SIGHUP);
 
 		D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): pass\n"));
-		if (jffs2_garbage_collect_pass(c) == -ENOSPC) {
+		if ((force_gc || jffs2_thread_should_wake(c))
+		     && jffs2_garbage_collect_pass(c) == -ENOSPC) {
 			printk(KERN_NOTICE "No space for garbage collection. Aborting GC thread\n");
 			goto die;
 		}

-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH][update] jffs2_gcd_mtd3, Stopping kernel threads timed out
       [not found]       ` <200706261639.49486.u.luckas@road.de>
@ 2007-06-26 15:36         ` Josh Boyer
  2007-06-27  7:53           ` Uli Luckas
  0 siblings, 1 reply; 12+ messages in thread
From: Josh Boyer @ 2007-06-26 15:36 UTC (permalink / raw)
  To: Uli Luckas; +Cc: David Woodhouse, linux-mtd

On Tue, 2007-06-26 at 16:39 +0200, Uli Luckas wrote:
> On Tuesday, 26. June 2007, Josh Boyer wrote:
> > On Tue, 2007-06-26 at 15:06 +0200, Uli Luckas wrote:
> > > On Tuesday, 19. June 2007, Uli Luckas wrote:
> > > > Hi,
> > > > is there anything in the way of apllying this patch?
> > >
> > > Please, can someone tell me what it takes to get a jffs2 bug fix into the
> > > kernel? Or even reviewed? This patch should even get into 2.6.22. Am I
> > > doing something wrong here?
> >
> > You aren't doing anything wrong.  David is away on business.
> >
> does that mean, we won't get any fixes applied, before David is back? And does 
> anyone know, when he will be back?

Basically, yes.  He's the one with the permissions to commit to the mtd
git tree.

> > The one thing I would hesitate with about your patch is that you've now
> > broken the existing behavior of the thread in regards to SIGHUP.  You
> > used to be able to send the threads a SIGHUP and it would do a single
> > pass.  With your patch, it won't do that unless the thresholds are
> > right.  Being able to send SIGHUP to force a GC pass is a pretty useful
> > thing for debugging, etc.
> >
> thanks Josh, alot for reviewing the patch. Following your advise, I force GC 
> now, if SIGHUP was received.
> The patch still introduces a change in sematics though for all other signals 
> (except SIGKILL). But I feel, the new behavior is more what one would expect. 
> In case, the old behavior is desired, it is simple enough to set force_gc in 
> the coresponding branches.

Your updated patch looks good to me.  Will need a Signed-off-by: line
though.

josh

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH][update] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-26 15:36         ` [PATCH][update] " Josh Boyer
@ 2007-06-27  7:53           ` Uli Luckas
  0 siblings, 0 replies; 12+ messages in thread
From: Uli Luckas @ 2007-06-27  7:53 UTC (permalink / raw)
  To: Josh Boyer; +Cc: David Woodhouse, linux-mtd

On Tuesday, 26. June 2007, Josh Boyer wrote:
> On Tue, 2007-06-26 at 16:39 +0200, Uli Luckas wrote:
> > On Tuesday, 26. June 2007, Josh Boyer wrote:
> > > The one thing I would hesitate with about your patch is that you've now
> > > broken the existing behavior of the thread in regards to SIGHUP.  You
> > > used to be able to send the threads a SIGHUP and it would do a single
> > > pass.  With your patch, it won't do that unless the thresholds are
> > > right.  Being able to send SIGHUP to force a GC pass is a pretty useful
> > > thing for debugging, etc.
> > >
> > thanks Josh, alot for reviewing the patch. Following your advise, I force GC 
> > now, if SIGHUP was received.
> > The patch still introduces a change in sematics though for all other signals 
> > (except SIGKILL). But I feel, the new behavior is more what one would expect. 
> > In case, the old behavior is desired, it is simple enough to set force_gc in 
> > the coresponding branches.
> 
> Your updated patch looks good to me.  Will need a Signed-off-by: line
> though.
> 
It's there, right above the patch.

Uli

-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-14 13:09 [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out Uli Luckas
  2007-06-19  9:49 ` Uli Luckas
@ 2007-06-28 18:52 ` David Woodhouse
  2007-06-29  8:24   ` Uli Luckas
  2007-07-24  7:35   ` Uli Luckas
  1 sibling, 2 replies; 12+ messages in thread
From: David Woodhouse @ 2007-06-28 18:52 UTC (permalink / raw)
  To: Uli Luckas; +Cc: linux-mtd

On Thu, 2007-06-14 at 15:09 +0200, Uli Luckas wrote:
> The problem seems to happen, when suspend kicks in, after the call to 
> try_to_freeze and before the while loop in jffs2_garbage_collect_thread.
> 
> The pending freeze will cause signal_pending to return true until the 
> attempted suspend is over and thereby the while loop won't terminate until 
> the suspend times out.
> 
> This patch will call try_to_freeze from within the while loop and adds an 
> extra check for jffs2_thread_should_wake before we actually do the GC to 
> avoid calling jffs2_garbage_collect_pass at every wakeup.

Thanks. I've committed a slightly simpler fix:
http://git.infradead.org/?p=mtd-2.6.git;a=commitdiff;h=e716dd3644c2a79d6ffa4359bac06f57479dcb34

-- 
dwmw2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-28 18:52 ` [PATCH] " David Woodhouse
@ 2007-06-29  8:24   ` Uli Luckas
  2007-06-29  8:28     ` David Woodhouse
  2007-07-24  7:35   ` Uli Luckas
  1 sibling, 1 reply; 12+ messages in thread
From: Uli Luckas @ 2007-06-29  8:24 UTC (permalink / raw)
  To: linux-mtd; +Cc: David Woodhouse

On Thursday, 28. June 2007, David Woodhouse wrote:
> On Thu, 2007-06-14 at 15:09 +0200, Uli Luckas wrote:
> > The problem seems to happen, when suspend kicks in, after the call to
> > try_to_freeze and before the while loop in jffs2_garbage_collect_thread.
> >
> > The pending freeze will cause signal_pending to return true until the
> > attempted suspend is over and thereby the while loop won't terminate
> > until the suspend times out.
> >
> > This patch will call try_to_freeze from within the while loop and adds an
> > extra check for jffs2_thread_should_wake before we actually do the GC to
> > avoid calling jffs2_garbage_collect_pass at every wakeup.
>
> Thanks. I've committed a slightly simpler fix:
> http://git.infradead.org/?p=mtd-2.6.git;a=commitdiff;h=e716dd3644c2a79d6ffa
>4359bac06f57479dcb34
>
But then again, my patch was more complex for a reason :-) How does your patch 
handle the situation, where try_to_freeze returns true _and_ there is a 
pending SIGHUP?

I plead for applying my patch.

regards,
Uli

-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-29  8:24   ` Uli Luckas
@ 2007-06-29  8:28     ` David Woodhouse
  2007-06-29  8:59       ` Uli Luckas
  0 siblings, 1 reply; 12+ messages in thread
From: David Woodhouse @ 2007-06-29  8:28 UTC (permalink / raw)
  To: Uli Luckas; +Cc: linux-mtd

On Fri, 2007-06-29 at 10:24 +0200, Uli Luckas wrote:
> But then again, my patch was more complex for a reason :-) How does your patch 
> handle the situation, where try_to_freeze returns true _and_ there is a 
> pending SIGHUP?

It'll go back to the beginning of the loop, then if it _does_ take the 
!thread_should_wake() path it'll be woken immediately by the pending
SIGHUP, and it'll do one GC pass as intended.

-- 
dwmw2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-29  8:28     ` David Woodhouse
@ 2007-06-29  8:59       ` Uli Luckas
  0 siblings, 0 replies; 12+ messages in thread
From: Uli Luckas @ 2007-06-29  8:59 UTC (permalink / raw)
  To: linux-mtd; +Cc: David Woodhouse

On Friday, 29. June 2007, David Woodhouse wrote:
> On Fri, 2007-06-29 at 10:24 +0200, Uli Luckas wrote:
> > But then again, my patch was more complex for a reason :-) How does your
> > patch handle the situation, where try_to_freeze returns true _and_ there
> > is a pending SIGHUP?
>
> It'll go back to the beginning of the loop, then if it _does_ take the
> !thread_should_wake() path it'll be woken immediately by the pending
> SIGHUP, and it'll do one GC pass as intended.
>
Hi David,
Thanks for your explanation. You are obviously right. 
I missed the point where a pending signal keeps wakeing INTERRUPTIBLE tasks 
until it is handled.

regards,
Uli

-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out
  2007-06-28 18:52 ` [PATCH] " David Woodhouse
  2007-06-29  8:24   ` Uli Luckas
@ 2007-07-24  7:35   ` Uli Luckas
  1 sibling, 0 replies; 12+ messages in thread
From: Uli Luckas @ 2007-07-24  7:35 UTC (permalink / raw)
  To: linux-mtd; +Cc: David Woodhouse

On Thursday, 28. June 2007, David Woodhouse wrote:
> On Thu, 2007-06-14 at 15:09 +0200, Uli Luckas wrote:
> > The problem seems to happen, when suspend kicks in, after the call to
> > try_to_freeze and before the while loop in jffs2_garbage_collect_thread.
> >
> > The pending freeze will cause signal_pending to return true until the
> > attempted suspend is over and thereby the while loop won't terminate
> > until the suspend times out.
> >
> > This patch will call try_to_freeze from within the while loop and adds an
> > extra check for jffs2_thread_should_wake before we actually do the GC to
> > avoid calling jffs2_garbage_collect_pass at every wakeup.
>
> Thanks. I've committed a slightly simpler fix:
> http://git.infradead.org/?p=mtd-2.6.git;a=commitdiff;h=e716dd3644c2a79d6ffa
>4359bac06f57479dcb34

Hi David,
could you please push this patch upstream?

regards,
Uli

-- 

------- ROAD ...the handyPC Company - - -  ) ) )

Uli Luckas
Software Development

ROAD GmbH
Bennigsenstr. 14 | 12159 Berlin | Germany
fon: +49 (30) 230069 - 64 | fax: +49 (30) 230069 - 69
url: www.road.de

Amtsgericht Charlottenburg: HRB 96688 B
Managing directors: Hans-Peter Constien, Hubertus von Streit

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2007-07-24  7:36 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-14 13:09 [PATCH] jffs2_gcd_mtd3, Stopping kernel threads timed out Uli Luckas
2007-06-19  9:49 ` Uli Luckas
2007-06-26 13:06   ` Uli Luckas
2007-06-26 13:19     ` Josh Boyer
2007-06-26 15:34       ` Uli Luckas
     [not found]       ` <200706261639.49486.u.luckas@road.de>
2007-06-26 15:36         ` [PATCH][update] " Josh Boyer
2007-06-27  7:53           ` Uli Luckas
2007-06-28 18:52 ` [PATCH] " David Woodhouse
2007-06-29  8:24   ` Uli Luckas
2007-06-29  8:28     ` David Woodhouse
2007-06-29  8:59       ` Uli Luckas
2007-07-24  7:35   ` Uli Luckas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox