Messages in this thread Patch in this message | | | From | David Howells <> | Subject | Re: [PATCH] AFS: Fix compilation warning | Date | Tue, 14 Jul 2009 17:17:26 +0100 |
| |
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;
| |