Messages in this thread | | | Date | Mon, 30 Nov 2009 01:26:53 -0500 | From | Erez Zadok <> | Subject | Re: [PATCH 13/41] whiteout: tmpfs whiteout support |
| |
In message <1256152779-10054-14-git-send-email-vaurora@redhat.com>, Valerie Aurora writes: > From: Jan Blunck <jblunck@suse.de> > > Add support for whiteout dentries to tmpfs.
Shouldn't you CC Hugh Dickins here? He's probably best positioned to review the changes in mm/shmem.c.
> XXX - Not sure this is the right patch to put the code for supporting > whiteouts in d_genocide(). > > Signed-off-by: Jan Blunck <jblunck@suse.de> > Signed-off-by: David Woodhouse <dwmw2@infradead.org> > Signed-off-by: Valerie Aurora <vaurora@redhat.com> > --- > fs/dcache.c | 3 +- > mm/shmem.c | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ > 2 files changed, 137 insertions(+), 15 deletions(-) > > diff --git a/fs/dcache.c b/fs/dcache.c > index 0fcae4b..1fae1df 100644 > --- a/fs/dcache.c > +++ b/fs/dcache.c > @@ -2280,7 +2280,8 @@ resume: > struct list_head *tmp = next; > struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); > next = tmp->next; > - if (d_unhashed(dentry)||!dentry->d_inode) > + if (d_unhashed(dentry)||(!dentry->d_inode && > + !d_is_whiteout(dentry)))
I think this d_genocide patch should go elsewhere. What does it have to do with tmpfs?
Also, is your logic above correct? If I understood d_genocide correctly, then the code you changed attempts to skip over dentries for which d_genocide has no work to do, like unhashed and negative dentries. So I assume it should also skip over whiteout dentries. Your condition is
if (d_unhashed(dentry) || (!dentry->d_inode && !d_is_whiteout(dentry)))
but perhaps it needs to be
if (d_unhashed(dentry) || !dentry->d_inode || d_is_whiteout(dentry))
No?
Either way, you may want to document any complex conditional that may be confusing to parse.
> continue; > if (!list_empty(&dentry->d_subdirs)) { > this_parent = dentry; > diff --git a/mm/shmem.c b/mm/shmem.c > index d713239..2faa14b 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c [mm/shmem.c changes snipped]
Erez.
| |