On 08/08, Eric W. Biederman wrote: > > Oleg Nesterov writes: > > > To me it looks a bit annoying that task_mmu.c needs 6 seq_operations's and > > 6 file_operations's to handle /proc/pid/*maps*. And _only_ because ->show() > > differs. > > > > Eric, et al, what do you think? At least something like 1-3 looks like a > > good cleanup imho. And afaics we can do more cleanups on top. > > > I see where you are getting annoyed. > > Taking a quick look at task_mmu.c It looks like the tgid vs pid logic > to decided which stack or stacks to display is simply incorrect. Yes, probably, but please forget this for now. Because, > Given where you are starting I think tack_mmu.c code that decides > when/which stack deserves a serious audit. Yes. And more. At least this code needs more cleanups. ->task should die or at least we should avoid get/put_task_struct, ->pid can die too, hold_task_mempolicy() doesn't look correct (at least the "prevent changing our mempolicy while show_numa_maps" comment and down_write() in do_set_mempolicy(). I am going to try to cleanup this a bit after I change task_nommu.c to avoid mm_access() in m_start(). But this is off-topic, > At a practical level moving pid_entry into the proc inode is ugly > especially for the hack that is is_tgid_pid_entry. Well, I am not going to argue with maintainer, mostly simply because I do not understand this code enough ;) But let me say that I disagree. We already have ->fd, and ->sysctl*. I see nothing wrong if *id_base_stuff files have more info for free. And imo proc_inode->sysctl* is much worse. Simply because they are not private to fs/proc/proc_sysctl.c. Could you please look into the attached mbox? I am just curious if we can do something like this in a clean way. In particular, please look at "Note:" comment in 3/3. Perhaps proc_sys_init() can do proc_get_inode(), initialize/instantiate it... To clarify, of course it is not that I want to shrink sizeof(proc_inode). Just to me it doesn't look clean that proc_evict_inode() has to do sysctl_head_put(), grab_header() assumes that ->sysctl == NULL means sysctl_table_root.*, etc. > That test could be implemented more easily by looking at the parent > directories inode operations and seeing if they are > proc_root_inode_operations. Hmm. Looking at inode? How? Oleg.