Ver Fonte

NFS: Ensure that nfs_link() instantiates the dentry correctly

 Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Trond Myklebust há 19 anos atrás
pai
commit
cf80955614
1 ficheiros alterados com 4 adições e 7 exclusões
  1. 4 7
      fs/nfs/dir.c

+ 4 - 7
fs/nfs/dir.c

@@ -1432,17 +1432,14 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
 		old_dentry->d_parent->d_name.name, old_dentry->d_name.name,
 		dentry->d_parent->d_name.name, dentry->d_name.name);
 
-	/*
-	 * Drop the dentry in advance to force a new lookup.
-	 * Since nfs_proc_link doesn't return a file handle,
-	 * we can't use the existing dentry.
-	 */
 	lock_kernel();
-	d_drop(dentry);
-
 	nfs_begin_data_update(dir);
 	nfs_begin_data_update(inode);
 	error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name);
+	if (error == 0) {
+		atomic_inc(&inode->i_count);
+		d_instantiate(dentry, inode);
+	}
 	nfs_end_data_update(inode);
 	nfs_end_data_update(dir);
 	unlock_kernel();