lkml.org 
[lkml]   [2009]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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.


    \
     
     \ /
      Last update: 2009-11-30 07:29    [W:3.290 / U:0.324 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site