]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
afs: afs_unlink() doesn't need to check dentry->d_inode
authorDavid Howells <dhowells@redhat.com>
Thu, 20 Jun 2019 17:12:16 +0000 (18:12 +0100)
committerDavid Howells <dhowells@redhat.com>
Thu, 20 Jun 2019 17:12:16 +0000 (18:12 +0100)
Don't check that dentry->d_inode is valid in afs_unlink().  We should be
able to take that as given.

This caused Smatch to issue the following warning:

fs/afs/dir.c:1392 afs_unlink() error: we previously assumed 'vnode' could be null (see line 1375)

Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: David Howells <dhowells@redhat.com>
fs/afs/dir.c

index 79d93a26759ae7cc0dcf633a79f85efd5a2c7711..93fd51c3bdaef673e955dea516abe4864cf14c31 100644 (file)
@@ -1394,7 +1394,8 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
 {
        struct afs_fs_cursor fc;
        struct afs_status_cb *scb;
-       struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode = NULL;
+       struct afs_vnode *dvnode = AFS_FS_I(dir);
+       struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
        struct key *key;
        bool need_rehash = false;
        int ret;
@@ -1417,15 +1418,12 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
        }
 
        /* Try to make sure we have a callback promise on the victim. */
-       if (d_really_is_positive(dentry)) {
-               vnode = AFS_FS_I(d_inode(dentry));
-               ret = afs_validate(vnode, key);
-               if (ret < 0)
-                       goto error_key;
-       }
+       ret = afs_validate(vnode, key);
+       if (ret < 0)
+               goto error_key;
 
        spin_lock(&dentry->d_lock);
-       if (vnode && d_count(dentry) > 1) {
+       if (d_count(dentry) > 1) {
                spin_unlock(&dentry->d_lock);
                /* Start asynchronous writeout of the inode */
                write_inode_now(d_inode(dentry), 0);