Răsfoiți Sursa

Orangefs: don't trigger copy_attributes_to_inode from d_revalidate.

Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Mike Marshall 9 ani în urmă
părinte
comite
f987f4c28a
1 a modificat fișierele cu 14 adăugiri și 36 ștergeri
  1. 14 36
      fs/orangefs/dcache.c

+ 14 - 36
fs/orangefs/dcache.c

@@ -77,7 +77,7 @@ out_drop:
 /*
  * Verify that dentry is valid.
  *
- * Should return 1 if dentry can still be trusted, else 0
+ * Should return 1 if dentry can still be trusted, else 0.
  */
 static int orangefs_d_revalidate(struct dentry *dentry, unsigned int flags)
 {
@@ -92,49 +92,27 @@ static int orangefs_d_revalidate(struct dentry *dentry, unsigned int flags)
 
 	/* find inode from dentry */
 	if (!dentry->d_inode) {
-		gossip_debug(GOSSIP_DCACHE_DEBUG, "%s: negative dentry.\n",
+		gossip_debug(GOSSIP_DCACHE_DEBUG,
+			     "%s: negative dentry.\n",
 			     __func__);
-		goto invalid_exit;
+		goto out;
 	}
 
 	gossip_debug(GOSSIP_DCACHE_DEBUG, "%s: inode valid.\n", __func__);
 	inode = dentry->d_inode;
 
-	/*
-	 * first perform a lookup to make sure that the object not only
-	 * exists, but is still in the expected place in the name space
-	 */
-	if (!is_root_handle(inode)) {
-		if (!orangefs_revalidate_lookup(dentry))
-			goto invalid_exit;
-	} else {
-		gossip_debug(GOSSIP_DCACHE_DEBUG,
-			     "%s: root handle, lookup skipped.\n",
-			     __func__);
+	/* skip root handle lookups. */
+	if (is_root_handle(inode)) {
+		ret = 1;
+		goto out;
 	}
 
-	/* now perform getattr */
-	gossip_debug(GOSSIP_DCACHE_DEBUG,
-		     "%s: doing getattr: inode: %p, handle: %pU\n",
-		     __func__,
-		     inode,
-		     get_khandle_from_ino(inode));
-	ret = orangefs_inode_getattr(inode, ORANGEFS_ATTR_SYS_ALL_NOHINT);
-	gossip_debug(GOSSIP_DCACHE_DEBUG,
-		     "%s: getattr %s (ret = %d), returning %s for dentry i_count=%d\n",
-		     __func__,
-		     (ret == 0 ? "succeeded" : "failed"),
-		     ret,
-		     (ret == 0 ? "valid" : "INVALID"),
-		     atomic_read(&inode->i_count));
-	if (ret != 0)
-		goto invalid_exit;
-
-	/* dentry is valid! */
-	return 1;
-
-invalid_exit:
-	return 0;
+	/* lookup the object. */
+	if (orangefs_revalidate_lookup(dentry))
+		ret = 1;
+
+out:
+	return ret;
 }
 
 const struct dentry_operations orangefs_dentry_operations = {