Yes, /proc/[pid] handling is diferent and your solution is perfect just for the other proc directories.<div><br></div><div>Informations under [pid] directories are about tasks (processes), and most of this information is represented by task_struct structure (defined in include/linux/sched.h).</div>

<div><br></div><div>I think one easy way to solve this problem is:</div><div><br></div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>In include/linux/sched.h file</div><div>1 - add a new element in task_struct structure.<br>

<div>struct task_struct {</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>int my_value;</div></div><div>        .......</div></div><div><br></div><div>In  fs/proc/base.c file</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>

<meta http-equiv="content-type" content="text/html; charset=utf-8">1 - Create a new entry in static pid_entry tgid_base_stuff[] array.</div><div>e.g. <span class="Apple-tab-span" style="white-space:pre">        </span>ONE(&quot;MY_FILE&quot;, S_IRUSR, proc_pid_my_file),</div>

<div><br></div><div>2 - Create a callback function that will be invoked when the new proc entry is accessed (*task_struct is passed to this function).</div><div><div>static int proc_pid_my_file(struct seq_file *m, struct pid_namespace *ns,</div>

<div><span class="Apple-tab-span" style="white-space:pre">                                </span>struct pid *pid, struct task_struct *task)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>seq_printf(m, &quot;%s %d\n&quot;, &quot;here we go....&quot;, task-&gt;my_value);</div>

<div><span class="Apple-tab-span" style="white-space:pre">        </span>return 0;</div><div>}</div></div><div><br></div><div><br></div><div>Use the task_struct as usual:</div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>struct task_struct *task;</div>

<div><span class="Apple-tab-span" style="white-space:pre">        </span>task = pid_task(find_vpid(1), PIDTYPE_PID);</div></div><div><br></div><div><br></div><div>I don&#39;t know if it is the best solution, but it seems it worked.</div>

<div>If anyone know a more easy or correct solution please let me know.</div><div><br></div><div>Thanks again,</div><div>Mauro Romano Trajber</div><div><br><div class="gmail_quote">On Wed, Jan 12, 2011 at 7:41 AM, Rajat Sharma <span dir="ltr">&lt;<a href="mailto:fs.rajat@gmail.com">fs.rajat@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">yes you are right, it gives NULL for &lt;pid&gt; directories under proc but<br>
I tried changing pid to something else, say /proc/sys and it works.<br>
Looks like handling of pid directories is entirely different. I didn&#39;t<br>
get time to explore on that, will have to dig more into this.<br>
<br>
Rajat<br>
<br>
On Wed, Jan 12, 2011 at 12:50 AM, Mauro Romano Trajber<br>
<div><div></div><div class="h5">&lt;<a href="mailto:trajber@gmail.com">trajber@gmail.com</a>&gt; wrote:<br>
&gt; Following your recommendations parent-&gt;pde always returns NULL. You know why<br>
&gt; ?<br>
&gt; // code...<br>
&gt; err = kern_path(&quot;/proc/1/&quot;, LOOKUP_FOLLOW, &amp;path);<br>
&gt; if (err) {<br>
&gt; return err;<br>
&gt; }<br>
&gt; struct proc_inode *parent = PROC_I(path.dentry-&gt;d_inode);<br>
&gt; struct proc_dir_entry *parent_dir = parent-&gt;pde;<br>
&gt; if (parent_dir == NULL) {<br>
&gt; printk(&quot;parent_dir is NULL\n&quot;);<br>
&gt; } else {<br>
&gt; create_proc_entry(&quot;SOMEFile&quot;, 0644, parent_dir);<br>
&gt; }<br>
&gt;<br>
&gt; Mauro!<br>
&gt; On Tue, Jan 11, 2011 at 4:39 AM, Rajat Sharma &lt;<a href="mailto:fs.rajat@gmail.com">fs.rajat@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Try this:<br>
&gt;&gt; 1. do a path_lookup for parent proc dir e.g. /proc/1234 and get its inode.<br>
&gt;&gt; 2. get proc_inode structure for parent from vfs inode like this:<br>
&gt;&gt;          sruct proc_inode *parent = PROC_I(inode).<br>
&gt;&gt;    PROC_I is defined in proc_fs.h<br>
&gt;&gt; 3. get parent proc_dir_entry object:<br>
&gt;&gt;          struct proc_dir_entry *parent_dir = parent-&gt;pde;<br>
&gt;&gt; 4. now you can call:<br>
&gt;&gt;          create_proc_entry(&quot;SOME file&quot;, 0644, parent_dir);<br>
&gt;&gt; 5. or you can create a directory if you want:<br>
&gt;&gt;          proc_mkdir(&quot;your dir&quot;, parent_dir);<br>
&gt;&gt;<br>
&gt;&gt; hope this helps.<br>
&gt;&gt;<br>
&gt;&gt; Rajat<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Jan 11, 2011 at 12:19 AM, Mauro Romano Trajber<br>
&gt;&gt; &lt;<a href="mailto:trajber@gmail.com">trajber@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; I think I found:<br>
&gt;&gt; &gt; static const struct pid_entry tgid_base_stuff[] at fs/proc/base.c has<br>
&gt;&gt; &gt; all<br>
&gt;&gt; &gt; /proc/[pid] entries.<br>
&gt;&gt; &gt; But unfortunately it does not use create_proc_entry function, and I&#39;m<br>
&gt;&gt; &gt; trying<br>
&gt;&gt; &gt; to create a new syscall that creates a new proc_entry for the caller<br>
&gt;&gt; &gt; process.<br>
&gt;&gt; &gt; Adding a new element in tgid_base_stuff[] makes the things more<br>
&gt;&gt; &gt; complicated<br>
&gt;&gt; &gt; than simply call a create_proc_entry function.<br>
&gt;&gt; &gt; Is there another way to do it ?<br>
&gt;&gt; &gt; Mauro Romano Trajber<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mon, Jan 10, 2011 at 3:18 PM, Mauro Romano Trajber<br>
&gt;&gt; &gt; &lt;<a href="mailto:trajber@gmail.com">trajber@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; How can I create a new proc entry under /proc/[pid] ?<br>
&gt;&gt; &gt;&gt; I using create_proc_entry(&quot;SOME_FILE&quot;, 0644, NULL /* here goes the pid<br>
&gt;&gt; &gt;&gt; proc entry */);<br>
&gt;&gt; &gt;&gt; Is there any way to get PID directory as a parent proc entry ? How ?<br>
&gt;&gt; &gt;&gt; Thanks,<br>
&gt;&gt; &gt;&gt; Mauro<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; Kernelnewbies mailing list<br>
&gt;&gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>