* a file and its obdo */
case IT_CREAT:
case IT_CREAT|IT_OPEN:
+ case IT_LINK:
+ case IT_LOOKUP:
case IT_MKDIR:
- case IT_SYMLINK:
case IT_MKNOD:
- case IT_LINK:
case IT_OPEN:
+ case IT_READLINK:
case IT_RENAME:
+ case IT_RMDIR:
case IT_SETATTR:
- case IT_LOOKUP:
+ case IT_SYMLINK:
case IT_UNLINK:
- case IT_RMDIR:
bufcount = 3;
break;
case IT_RENAME2:
switch (it->opc) {
case IT_CREAT:
case IT_CREAT|IT_OPEN:
+ case IT_LINK:
case IT_MKDIR:
- case IT_SYMLINK:
case IT_MKNOD:
- case IT_LINK:
- case IT_UNLINK:
- case IT_RMDIR:
case IT_RENAME2:
+ case IT_RMDIR:
+ case IT_SYMLINK:
+ case IT_UNLINK:
rc = mds_reint_p(2, req);
if (rc || req->rq_status != 0) {
rep->lock_policy_res2 = req->rq_status;
}
break;
case IT_GETATTR:
+ case IT_LOOKUP:
+ case IT_OPEN:
case IT_READDIR:
+ case IT_READLINK:
case IT_RENAME:
- case IT_OPEN:
case IT_SETATTR:
- case IT_LOOKUP:
rc = mds_getattr_name_p(2, req);
/* FIXME: we need to sit down and decide on who should
* set req->rq_status, who should return negative and
LBUG();
}
- if (it->opc == IT_UNLINK || it->opc == IT_RMDIR ||
+ if (it->opc == IT_UNLINK || it->opc == IT_RMDIR ||
it->opc == IT_RENAME || it->opc == IT_RENAME2)
RETURN(ELDLM_LOCK_ABORTED);
IT_MKNOD)))
lock_mode = LCK_PW;
else if (it->it_op & (IT_READDIR | IT_GETATTR | IT_OPEN | IT_UNLINK |
- IT_RMDIR | IT_RENAME | IT_RENAME2))
+ IT_RMDIR | IT_RENAME | IT_RENAME2 | IT_READLINK))
lock_mode = LCK_PR;
else if (it->it_op & IT_LOOKUP)
lock_mode = LCK_CR;
oinfo = ll_i2info(inode);
+ if (dentry->d_it->it_disposition) {
+ d_instantiate(dentry, inode);
+ return 0;
+ }
+
OBD_ALLOC(oinfo->lli_symlink_name, l + 1);
+ if (!oinfo->lli_symlink_name)
+ RETURN(-ENOMEM);
+
memcpy(oinfo->lli_symlink_name, symname, l + 1);
inode->i_size = l;
- ext2_inc_count(inode);
- atomic_inc(&inode->i_count);
-
return ext2_add_nondir(dentry, inode);
}