From: Cyrill Gorcunov <gorcunov@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill@shutemov.name>,
Vasiliy Kulikov <segoon@openwall.com>,
containers@lists.osdl.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, Nathan Lynch <ntl@pobox.com>,
Oren Laadan <orenl@cs.columbia.edu>,
Daniel Lezcano <dlezcano@fr.ibm.com>,
Glauber Costa <glommer@parallels.com>,
James Bottomley <jbottomley@parallels.com>,
Tejun Heo <tj@kernel.org>, Alexey Dobriyan <adobriyan@gmail.com>,
Al Viro <viro@ZenIV.linux.org.uk>,
Pavel Emelyanov <xemul@parallels.com>
Subject: Re: [patch 2/2] fs, proc: Introduce the /proc/<pid>/map_files/ directory v6
Date: Thu, 1 Sep 2011 12:05:08 +0400 [thread overview]
Message-ID: <20110901080508.GF30615@sun> (raw)
In-Reply-To: <20110831151023.5b7e12da.akpm@linux-foundation.org>
On Wed, Aug 31, 2011 at 03:10:23PM -0700, Andrew Morton wrote:
...
Pavel has just addressed the intention of the patch in another
reply.
> >
> > +static struct vm_area_struct *
> > +find_exact_vma(struct mm_struct *mm, unsigned long vm_start, unsigned long vm_end)
> > +{
> > + struct vm_area_struct *vma = find_vma(mm, vm_start);
> > + if (vma && (vma->vm_start != vm_start || vma->vm_end != vm_end))
> > + vma = NULL;
> > + return vma;
> > +}
>
> This function would benefit from a code comment.
ok
>
> Given that it's pretty generic (indeed there might be open-coded code
> which already does this elsewhere), perhaps it should be in mm/mmap.c
> as a kernel-wide utility function. That will add a little overhead to
> CONFIG_PROC_FS=n builds, which doesn't seem terribly important.
>
Will update.
> > +static int map_name_to_addr(const unsigned ...
> > +{
>
...
> Again, a little bit of interface documentation would be nice. Explain
> what the parsed input format is, at least.
>
> simple_strtoul() is obsolete - use kstrto*(). A checkpatch rule for
> this is queued.
OK, will update.
>
> > +static int map_files_d_revalidate(struct dentry *dentry, struct nameidata *nd)
> > +{
> > +
...
> > + if (!map_name_to_addr(dentry->d_name.name, &vm_start, &vm_end)) {
> > + down_read(&mm->mmap_sem);
> > + vma = find_exact_vma(mm, vm_start, vm_end);
>
> OK, this is nasty. We have a local variable which points to a vma but
> then we release the locks and refcounts which protect that vma. So we
> have a pointer which we cannot dereference. That's dangerous.
...
> And we don't actually dereference it - at present. We use it as a bool.
>
> Would it not be nicer, safer and clearer to turn this pointer-as-a-bool
> into a bool?
>
> bool matching_vma_exists = !!find_exact_vma(mm, vm_start, vm_end);
>
Yeah, thanks, will update.
...
> > +
> > + inode->i_op = &proc_pid_link_inode_operations;
> > + inode->i_size = 64;
> > + inode->i_mode = S_IFLNK;
>
> The fancy indenting is not a thing we usually do in the kernel.
Fancy indenting really makes code easier to read, and in real
we do it in kernel as well, but ok, I'll drop it.
...
> > +/*
> > + * NOTE: The getattr/setattr for both /proc/$pid/map_files and
> > + * /proc/$pid/fd seems to have share the code, so need to be
> > + * unified and code duplication eliminated!
>
> Why not do this now?
There are a couple of reasons. Yesterday I was talking to
Vasiliy Kulikov about this snippet, so he seems about to send
you patches related to /proc/$pid/fd update, and after those
patches will be merged we are to drop code duplication.
Vasiliy, what the status of the update?
Secondly, I've had a problems trying to download -mm patches
yesterday (I believe 'cause of kernel.org problem) so I rather
put this note here in patch just to *not* forget to do a cleanup
work once things calm down. And eventually, I believe this
cleanup should be separately in a sake of bisectability.
Again, this note is related to the future patch from Vasiliy
and mark for myself to not forget clean it up later.
>
> > + */
> > +
> > +int proc_map_files_setattr(struct dentry *dentry, struct iattr *attr)
>
> static
Nod, thanks.
...
> > + * othrewise we get lockdep complains since filldir
>
> typo
Thanks.
>
> > + * might sleep.
> > + */
>
> Why would lockdep complain about sleep-inside-mmap_sem?
filldir calls for might_fault and need mmap_sem as well
(when CONFIG_PROVE_LOCKING is set) and this makes lockdep
to complain. In real I revealed it during testing.
...
> > + if (nr_files) {
> > + info = kmalloc(nr_files * sizeof(*info), GFP_KERNEL);
>
> I figure sizeof(*info) = 50 bytes. nr_files can easily be >1000.
>
> On large some applications the kmalloc attempt will be too large. This
> is a must-fix. Using vmalloc() would be very lame.
Yes, I'll add a test which one to use, either kmalloc, either vmalloc,
depending on size needed.
...
> > + vmai++;
>
> What is "vmai"? "vma index"? If so, please call it vma_index. If
> not, please call it something better anyway.
>
> vmai/vma_index could be made local to this code block.
ok
...
> > + for (i = 0; i < used; i++) {
> > + ret = proc_fill_cache(filp, dirent, filldir,
> > + info[i].name, info[i].len,
> > + proc_map_files_instantiate,
> > + task, info[i].file);
> > + if (ret)
> > + break;
> > + filp->f_pos++;
> > + }
> > +
> > + for (i = 0; i < used; i++)
> > + put_filp(info[i].file);
>
> Why not do the put_filp() in the previous loop and avoid some cache
> misses?
Because first loop may fail (break) and I still have to drop
refs to filep -- which in turn means I'll have to continue
from broken position, ie like this
for (; i < used; i++)
put_filp(info[i].file);
But, OK, I'll update. Thanks a huge for comments, Andrew!
Cyrill
next prev parent reply other threads:[~2011-09-01 8:05 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-31 7:58 [patch 0/2] Introduce /proc/pid/map_files v6 Cyrill Gorcunov
2011-08-31 7:58 ` [patch 1/2] fs, proc: Make proc_get_link to use dentry instead of inode Cyrill Gorcunov
2011-08-31 7:58 ` [patch 2/2] fs, proc: Introduce the /proc/<pid>/map_files/ directory v6 Cyrill Gorcunov
2011-08-31 9:06 ` Vasiliy Kulikov
2011-08-31 10:12 ` Cyrill Gorcunov
2011-08-31 11:26 ` Cyrill Gorcunov
2011-08-31 14:04 ` Kirill A. Shutemov
2011-08-31 14:09 ` Cyrill Gorcunov
2011-08-31 14:26 ` Cyrill Gorcunov
2011-08-31 22:10 ` Andrew Morton
2011-09-01 3:07 ` Kyle Moffett
2011-09-01 7:58 ` Pavel Emelyanov
2011-09-01 11:50 ` Tejun Heo
2011-09-01 12:13 ` Pavel Emelyanov
2011-09-01 17:13 ` Tejun Heo
2011-09-02 19:15 ` Matt Helsley
2011-09-02 0:09 ` Matt Helsley
2011-09-01 8:05 ` Cyrill Gorcunov [this message]
2011-09-02 16:37 ` Vasiliy Kulikov
2011-09-05 18:53 ` Vasiliy Kulikov
2011-09-05 19:20 ` Cyrill Gorcunov
2011-09-05 19:49 ` Vasiliy Kulikov
2011-09-05 20:36 ` Cyrill Gorcunov
2011-09-06 10:15 ` Vasiliy Kulikov
2011-09-06 16:51 ` Tejun Heo
2011-09-06 17:29 ` Vasiliy Kulikov
2011-09-06 17:33 ` Tejun Heo
2011-09-06 18:15 ` Cyrill Gorcunov
[not found] ` <20110906173341.GM18425-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2011-09-07 11:23 ` Vasiliy Kulikov
2011-09-07 21:53 ` Cyrill Gorcunov
2011-09-07 22:13 ` Andrew Morton
2011-09-07 22:42 ` Cyrill Gorcunov
2011-09-07 22:53 ` Andrew Morton
2011-09-08 5:48 ` Cyrill Gorcunov
2011-09-08 5:50 ` Cyrill Gorcunov
2011-09-08 6:04 ` Cyrill Gorcunov
2011-09-08 23:52 ` Andrew Morton
2011-09-09 0:24 ` Pavel Emelyanov
2011-09-09 5:48 ` Cyrill Gorcunov
2011-09-09 6:00 ` Andrew Morton
2011-09-09 6:22 ` Cyrill Gorcunov
2011-09-10 13:21 ` [kernel-hardening] " Vasiliy Kulikov
2011-09-10 13:49 ` Cyrill Gorcunov
2011-09-01 10:46 ` Cyrill Gorcunov
2011-09-01 22:49 ` Andrew Morton
2011-09-01 23:04 ` Tejun Heo
2011-09-02 5:54 ` Cyrill Gorcunov
2011-09-02 5:53 ` Cyrill Gorcunov
2011-08-31 22:50 ` Andrew Morton
2011-09-02 1:54 ` Nicholas Miell
2011-09-02 1:58 ` Tejun Heo
2011-09-02 2:04 ` Nicholas Miell
2011-09-02 2:29 ` Tejun Heo
2011-09-02 8:07 ` Kirill A. Shutemov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110901080508.GF30615@sun \
--to=gorcunov@gmail.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=containers@lists.osdl.org \
--cc=dlezcano@fr.ibm.com \
--cc=glommer@parallels.com \
--cc=jbottomley@parallels.com \
--cc=kirill@shutemov.name \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ntl@pobox.com \
--cc=orenl@cs.columbia.edu \
--cc=segoon@openwall.com \
--cc=tj@kernel.org \
--cc=viro@ZenIV.linux.org.uk \
--cc=xemul@parallels.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).