+ RETURN(0);
+}
+
+
+static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
+ struct nameidata *nd,
+ struct lookup_intent *it, int flags)
+{
+ struct dentry *save = dentry, *retval;
+ struct ll_fid pfid;
+ struct ll_uctxt ctxt;
+ struct it_cb_data icbd;
+ struct ptlrpc_request *req = NULL;
+ struct lookup_intent lookup_it = { .it_op = IT_LOOKUP };
+ int rc;
+ ENTRY;
+
+ if (dentry->d_name.len > EXT3_NAME_LEN)
+ RETURN(ERR_PTR(-ENAMETOOLONG));
+
+ CDEBUG(D_VFSTRACE, "VFS Op:name=%s,dir=%lu/%u(%p),intent=%s\n",
+ dentry->d_name.name, parent->i_ino, parent->i_generation,
+ parent, LL_IT2STR(it));
+
+ if (d_mountpoint(dentry))
+ CERROR("Tell Peter, lookup on mtpt, it %s\n", LL_IT2STR(it));
+
+ if (nd != NULL)
+ nd->mnt->mnt_last_used = jiffies;
+
+ ll_frob_intent(&it, &lookup_it);
+
+ icbd.icbd_childp = &dentry;
+ icbd.icbd_parent = parent;
+ ll_inode2fid(&pfid, parent);
+ ll_i2uctxt(&ctxt, parent, NULL);
+
+ rc = md_intent_lock(ll_i2mdcexp(parent), &ctxt, &pfid,
+ dentry->d_name.name, dentry->d_name.len, NULL, 0,
+ NULL, it, flags, &req, ll_mdc_blocking_ast);
+ if (rc < 0)
+ GOTO(out, retval = ERR_PTR(rc));
+
+ rc = lookup_it_finish(req, 1, it, &icbd);
+ if (rc != 0) {
+ ll_intent_release(it);
+ GOTO(out, retval = ERR_PTR(rc));