Messages in this thread | | | Date | Tue, 22 Aug 2006 20:39:54 +0900 | From | KAMEZAWA Hiroyuki <> | Subject | Re: [RFC][PATCH] ps command race fix take2 [4/4] proc_pid_readdir |
| |
On 22 Aug 2006 13:11:30 +0200 Andi Kleen <ak@suse.de> wrote:
> KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> writes: > > > proc_pid_readdir() by list_token. > > > > Remember 'where we are reading' by inserting a token in the list. > > It seems a bit complicated because of RCU but what we do is very simple. > > > > What happens when you have multiple readers at the same time? Can't > the tokens then be mixed up? > multiple readers will insert their own token to a list. And list_next_rcu_skiptoken() skips all token (not-data). it's used by next_task().
> >+ /* this small kmalloc() can fail in rare case, but readdir() > >+ * is not allowed to return ENOMEM. retrying is reasonable. */ > > Who disallows this? Such retry loops are normally discouraged > because they can lead to deadlocks in OOM situations. > I think it would be better to just return ENOMEM. >
Hmm, to be honest, not disallowed. but not allowed. The apps don't expect readdir(3) failed with -ENOMEM. But yes, ps command or ls /proc may be caught in the kernel for some time.
-Kame
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |