[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <OF213EDC22.80E0A084-ONC1257792.0025CB36-C1257792.00268F36@transmode.se>
Date: Thu, 2 Sep 2010 09:01:10 +0200
From: Joakim Tjernlund <joakim.tjernlund@...nsmode.se>
To: dedekind1@...il.com
Cc: Artem Bityutskiy <Artem.Bityutskiy@...ia.com>, dwmw2@...radead.org,
linux-kernel@...r.kernel.org, linux-mtd@...ts.infradead.org,
Ingo Molnar <mingo@...e.hu>,
Wolfram Sang <w.sang@...gutronix.de>
Subject: Re: [RFC] jffs2: use cond_resched() instead of yield()
>
> This 'yield()' was introduced by dwmw2, so he may have strong feelings
> about it. CCed.
Actually, it was introduced by me with commit fd5324909e410a3202c1b01bd507c2dfba58fca5 :
[JFFS2] Fix hanging close for /dev/mtd character device.
When pdflush is erasing lots of sectors, drivers calling
mtd->sync will hang until all blocks are erased. Be nicer.
Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@...nsmode.se>
Signed-off-by: David Woodhouse <dwmw2@...radead.org>
@@ -142,7 +142,7 @@ void jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count)
}
/* Be nice */
- cond_resched();
+ yield();
spin_lock(&c->erase_completion_lock);
}
At the time cond_resched() was a problem but now I don't know. The erasing
has moved to the GC thread and been somewhat reworked. I don't know if
it still needs yield(). Perhaps David can tell?
Jocke
>
> On Wed, 2010-09-01 at 18:03 +0200, Wolfram Sang wrote:
> > yield() has different semantics meanwhile and even causes RT-kernels to
> > BUG. Replace the only appearance left in jffs2.
> >
> > Signed-off-by: Wolfram Sang <w.sang@...gutronix.de>
> > Cc: Artem Bityutskiy <Artem.Bityutskiy@...ia.com>
> > Cc: Ingo Molnar <mingo@...e.hu>
> > ---
> >
> > The aforementioned BUG() showed up in one of our customer's RT-projects. While
> > this could be handled by rearranging his thread-priorities, I wondered if such
> > a patch would be worthwhile, still. Reading through the material covering
> > yield() and related replacements, I believe this patch should be appropriate.
> > Please say if I missed some side-effects.
> >
> > fs/jffs2/erase.c | 2 +-
> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c
> > index abac961..e513f19 100644
> > --- a/fs/jffs2/erase.c
> > +++ b/fs/jffs2/erase.c
> > @@ -151,7 +151,7 @@ int jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count)
> > }
> >
> > /* Be nice */
> > - yield();
> > + cond_resched();
> > mutex_lock(&c->erase_free_sem);
> > spin_lock(&c->erase_completion_lock);
> > }
>
> --
> Best Regards,
> Artem Bityutskiy (Битюцкий Артём)
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
Powered by blists - more mailing lists