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:2.230 / U:0.132 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site