Messages in this thread | | | Subject | Re: [PATCH] AFS: Fix compilation warning | From | Jaswinder Singh Rajput <> | Date | Tue, 14 Jul 2009 14:28:51 +0530 |
| |
On Tue, 2009-07-14 at 14:17 +0530, Jaswinder Singh Rajput wrote: > On Thu, 2009-07-09 at 10:44 +0100, David Howells wrote: > > From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> > > > > Fix the following warning: > > > > fs/afs/dir.c: In function 'afs_d_revalidate': > > fs/afs/dir.c:567: warning: 'fid.vnode' may be used uninitialized in this function > > fs/afs/dir.c:567: warning: 'fid.unique' may be used uninitialized in this function > > > > by marking the 'fid' variable as an uninitialized_var. The problem is that gcc > > doesn't always manage to work out that fid is always set on the path through > > the function that uses it. > > > > Cc: linux-afs@lists.infradead.org > > Cc: linux-kernel@vger.kernel.org > > Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> > > Signed-off-by: David Howells <dhowells@redhat.com> > > --- > > > > Have you tried this approach : > > 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;
You can also remove this goto. So by this way, you can get rid of :
1. compiler warning 2. fix 80 column wrap problem 3. remove one goto
Enjoy. -- JSR
| |