lkml.org 
[lkml]   [2009]   [Jul]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH] AFS: Fix compilation warning
    Date

    Hi Artem,

    Can you try Jaswinder's patch? I don't see the warning even without your
    patch, so I can't test it.

    David
    ---
    diff --git a/fs/afs/dir.c b/fs/afs/dir.c
    index 9bd7577..09cb5bb 100644
    --- a/fs/afs/dir.c
    +++ b/fs/afs/dir.c
    @@ -607,53 +607,56 @@ static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd)

    /* search the directory for this vnode */
    ret = afs_do_lookup(&dir->vfs_inode, dentry, &fid, key);
    - switch (ret) {
    - case 0:
    - /* the filename maps to something */
    - if (!dentry->d_inode)
    - goto out_bad;
    - if (is_bad_inode(dentry->d_inode)) {
    - printk("kAFS: afs_d_revalidate: %s/%s has bad inode\n",
    - parent->d_name.name, dentry->d_name.name);
    + if (ret < 0) {
    + switch (ret) {
    + case -ENOENT:
    + /* the filename is unknown */
    + _debug("%s: dirent not found", dentry->d_name.name);
    + if (dentry->d_inode)
    + goto not_found;
    + goto out_valid;
    +
    + default:
    + _debug("failed to iterate dir %s: %d",
    + parent->d_name.name, ret);
    goto out_bad;
    }
    + }

    - /* if the vnode ID has changed, then the dirent points to a
    - * different file */
    - if (fid.vnode != vnode->fid.vnode) {
    - _debug("%s: dirent changed [%u != %u]",
    - dentry->d_name.name, fid.vnode,
    - vnode->fid.vnode);
    - goto not_found;
    - }
    -
    - /* if the vnode ID uniqifier has changed, then the file has
    - * been deleted and replaced, and the original vnode ID has
    - * been reused */
    - if (fid.unique != vnode->fid.unique) {
    - _debug("%s: file deleted (uq %u -> %u I:%llu)",
    - dentry->d_name.name, fid.unique,
    - vnode->fid.unique,
    - (unsigned long long)dentry->d_inode->i_version);
    - spin_lock(&vnode->lock);
    - set_bit(AFS_VNODE_DELETED, &vnode->flags);
    - spin_unlock(&vnode->lock);
    - goto not_found;
    - }
    - goto out_valid;
    -
    - case -ENOENT:
    - /* the filename is unknown */
    - _debug("%s: dirent not found", dentry->d_name.name);
    - if (dentry->d_inode)
    - goto not_found;
    - goto out_valid;
    -
    - default:
    - _debug("failed to iterate dir %s: %d",
    - parent->d_name.name, ret);
    + /* the filename maps to something */
    + if (!dentry->d_inode)
    goto out_bad;
    + if (is_bad_inode(dentry->d_inode)) {
    + printk("kAFS: afs_d_revalidate: %s/%s has bad inode\n",
    + parent->d_name.name, dentry->d_name.name);
    + goto out_bad;
    + }
    +
    + /*
    + * if the vnode ID has changed, then the dirent points to a
    + * different file
    + */
    + if (fid.vnode != vnode->fid.vnode) {
    + _debug("%s: dirent changed [%u != %u]",
    + dentry->d_name.name, fid.vnode, vnode->fid.vnode);
    + goto not_found;
    + }
    +
    + /*
    + * if the vnode ID uniqifier has changed, then the file has been
    + * deleted and replaced, and the original vnode ID has been reused
    + */
    + if (fid.unique != vnode->fid.unique) {
    + _debug("%s: file deleted (uq %u -> %u I:%llu)",
    + dentry->d_name.name, fid.unique,
    + vnode->fid.unique,
    + (unsigned long long)dentry->d_inode->i_version);
    + spin_lock(&vnode->lock);
    + set_bit(AFS_VNODE_DELETED, &vnode->flags);
    + spin_unlock(&vnode->lock);
    + goto not_found;
    }
    + goto out_valid;

    out_valid:
    dentry->d_fsdata = dir_version;

    \
     
     \ /
      Last update: 2009-07-14 18:21    [W:0.026 / U:63.292 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site