On Wed, Sep 07, 2011 at 03:13:23PM -0700, Andrew Morton wrote: ... > > > > > > Andrew, are you OK with closing the hole with pid_no_revalidate() > > > and 0600 /proc/slabinfo? If so, I feel I have to start this discussion > > > with people participating in the discussion above: Theodore, Dan, Linus, etc. > > I fell asleep a long time ago and don't know what pid_no_revalidate() > and slabinfo permissions have to do with this. Perhaps summarising the > issues in the changelog would be appropriate, dunno. Well, time to poke Vasiliy ;) ... > > > > I fear we still need to use two passes in proc_map_files_readdir, I found no way > > to escape lockdep complains when doing all work in one pass with mmap_sem taken. > > The /maps does the same thing -- ie it fills maps file with mmap_sem taken to produce > > robust data. > > The code's using three passes. Yes, and I didn't find thy way to escape it (actually if there would not be filldir+might_fault tuple I would create this all under mmap_sem and would not need this flex_array or any temporary storage at all and code would be a way simplier). > > > And I'm not really sure what you mean with problematic put_filp? > > I was thinking fput(), which can do a hell of a lot of stuff if it's > the final put on the inode. Ouch, somehow missed it, thanks! > > +err: > > + up_read(&mm->mmap_sem); > > + > > + for (i = 0; i < used && !ret; i++) { > > The "&& !ret" is unneeded? No, it's needed, since it makes sure that if "impossible" scenario happens and flex-arrays fails with preallocated data so we will reach this point with used > 0 and ret = -ENOMEM and thus will not call for proc_map_files_instantiate as needed. > > > + p = flex_array_get(fa, i); > > + ret = proc_fill_cache(filp, dirent, filldir, > > + p->name, p->len, > > + proc_map_files_instantiate, > > + task, p->file); > > + if (ret) > > + break; 1: Say we failed here > > + filp->f_pos++; > > + put_filp(p->file); > > + } > > + > > + for (; i < used; i++) { > > + p = flex_array_get(fa, i); > > + put_filp(p->file); > > + } > > Still unclear why we need the third loop. Due to (1) -- so we will have a number of files reference taken and need to put them back. Cyrill -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html