err = ll_lock(dir, dentry, it, &lockh);
if (err < 0) {
- /* FIXME: Mike handle EINTR here */
+ /* FIXME: Mike LBUG() can disappear the moment that
+ * ll_lock has sane interrupt behavior
+ */
LBUG();
RETURN(ERR_PTR(err));
}
memcpy(&lli->lli_intent_lock_handle, &lockh, sizeof(lockh));
ino = ll_inode_by_name(dir, dentry, &type);
+#warning FIXME: handle negative inode case (see old ll_lookup)
err = mdc_getattr(&sbi->ll_mdc_conn, ino, type,
OBD_MD_FLNOTOBD|OBD_MD_FLBLOCKS, 0, &request);
} else
md.md = NULL;
+ /* No rpc's happen during iget4, -ENOMEM's are possible */
inode = iget4(dir->i_sb, ino, ll_find_inode, &md);
-
if (it->it_op & IT_RENAME)
it->it_data = dentry;
out_req:
ptlrpc_free_req(request);
- if (!inode)
+ if (!inode || IS_ERR(inode)) {
+ ll_intent_release(dentry);
RETURN(ERR_PTR(-ENOMEM));
-
+ }
EXIT;
negative:
dentry->d_op = &ll_d_ops;