+
+ CDEBUG(D_INODE, "revalidate 0x%p: %*s -> %lu/%lu\n",
+ de, de->d_name.len, de->d_name.name,
+ (unsigned long) de->d_inode->i_ino,
+ (unsigned long) de->d_inode->i_generation);
+
+ exp = ll_i2mdcexp(de->d_inode);
+ ll_inode2fid(&pfid, de->d_parent->d_inode);
+ ll_inode2fid(&cfid, de->d_inode);
+ icbd.icbd_parent = de->d_parent->d_inode;
+ icbd.icbd_childp = &de;
+
+ /* Never execute intents for mount points.
+ * Attributes will be fixed up in ll_inode_revalidate_it */
+ if (d_mountpoint(de))
+ RETURN(1);
+
+ ll_frob_intent(&it, &lookup_it);
+ LASSERT(it);
+
+ ll_i2uctxt(&ctxt, de->d_parent->d_inode, de->d_inode);
+
+ if (it->it_op == IT_GETATTR) { /* We need to check for LOOKUP lock
+ as well */
+ rc = md_intent_lock(exp, &ctxt, &pfid, de->d_name.name,
+ de->d_name.len, NULL, 0, &cfid, &lookup_it,
+ flags, &req, ll_mdc_blocking_ast);
+ /* If there was no lookup lock, no point in even checking for
+ UPDATE lock */
+ if (!rc) {
+ it = &lookup_it;
+ GOTO(out, rc);
+ }
+ if (it_disposition(&lookup_it, DISP_LOOKUP_NEG)) {
+ ll_intent_release(&lookup_it);
+ it = &lookup_it;
+ GOTO(out, rc = 0);
+ }
+
+ if (req)
+ ptlrpc_req_finished(req);
+ req = NULL;
+ ll_lookup_finish_locks(&lookup_it, de);