|
@@ -978,10 +978,11 @@ static int nfs_is_exclusive_create(struct inode *dir, unsigned int flags)
|
|
|
* particular file and the "nocto" mount flag is not set.
|
|
|
*
|
|
|
*/
|
|
|
-static inline
|
|
|
+static
|
|
|
int nfs_lookup_verify_inode(struct inode *inode, unsigned int flags)
|
|
|
{
|
|
|
struct nfs_server *server = NFS_SERVER(inode);
|
|
|
+ int ret;
|
|
|
|
|
|
if (IS_AUTOMOUNT(inode))
|
|
|
return 0;
|
|
@@ -992,9 +993,13 @@ int nfs_lookup_verify_inode(struct inode *inode, unsigned int flags)
|
|
|
if ((flags & LOOKUP_OPEN) && !(server->flags & NFS_MOUNT_NOCTO) &&
|
|
|
(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
|
|
|
goto out_force;
|
|
|
- return 0;
|
|
|
+out:
|
|
|
+ return (inode->i_nlink == 0) ? -ENOENT : 0;
|
|
|
out_force:
|
|
|
- return __nfs_revalidate_inode(server, inode);
|
|
|
+ ret = __nfs_revalidate_inode(server, inode);
|
|
|
+ if (ret != 0)
|
|
|
+ return ret;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
/*
|