lkml.org 
[lkml]   [2008]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 12/21] fat: Kill d_invalidate() in vfat_lookup()
    From
    Date

    d_invalidate() for positive dentry doesn't work in some cases
    (vfsmount, nfsd, and maybe others). shrink_dcache_parent() by
    d_invalidate() is pointless for vfat usage at all.

    So, this kills it, and intead of it uses d_move().

    To save old behavior, this returns alias simply for directory (don't
    change pwd, etc..). the directory lookup shouldn't be important for
    performance.

    Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
    ---

    fs/fat/namei_vfat.c | 13 ++++++-------
    1 file changed, 6 insertions(+), 7 deletions(-)

    diff -puN fs/fat/namei_vfat.c~vfat-dcache-d_invalidate-fix fs/fat/namei_vfat.c
    --- linux-2.6/fs/fat/namei_vfat.c~vfat-dcache-d_invalidate-fix 2008-08-27 19:18:24.000000000 +0900
    +++ linux-2.6-hirofumi/fs/fat/namei_vfat.c 2008-08-27 19:18:24.000000000 +0900
    @@ -745,13 +745,12 @@ static struct dentry *vfat_lookup(struct
    *
    * Switch to new one for reason of locality if possible.
    */
    - if (d_invalidate(alias) == 0)
    - dput(alias);
    - else {
    - iput(inode);
    - unlock_super(sb);
    - return alias;
    - }
    + BUG_ON(d_unhashed(alias));
    + if (!S_ISDIR(inode->i_mode))
    + d_move(alias, dentry);
    + iput(inode);
    + unlock_super(sb);
    + return alias;
    }
    out:
    unlock_super(sb);
    _

    \
     
     \ /
      Last update: 2008-10-15 16:07    [W:0.022 / U:151.644 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site