if (lock->l_ast_data && lock->l_ast_data != data) {
struct inode *new_inode = data;
struct inode *old_inode = lock->l_ast_data;
-/* FIXME: This is commented out by huanghua@clusterfs.com,
- * if anything wrong, please restore that */
-#if 0
LASSERTF(old_inode->i_state & I_FREEING,
"Found existing inode %p/%lu/%u state %lu in lock: "
"setting data to %p/%lu/%u\n", old_inode,
old_inode->i_ino, old_inode->i_generation,
old_inode->i_state,
new_inode, new_inode->i_ino, new_inode->i_generation);
-#else
- if (!(old_inode->i_state & I_FREEING)) {
- CERROR("Found existing inode %p/%lu/%u state %lu in "
- "lock: "LPX64", and setting its data to %p/%lu/%u\n",
- old_inode, old_inode->i_ino,
- old_inode->i_generation, old_inode->i_state,
- ((struct lustre_handle *)lockh)->cookie,
- new_inode, new_inode->i_ino, new_inode->i_generation);
- }
-#endif
}
#endif
-
-#ifdef __KERNEL__
- {
- /* This is debug code by huanghua. Please remove this when ready */
- struct inode *new_inode = data;
- CERROR("XXX: I am going to set lockh : "LPX64" to %p/%lu/%u\n",
- ((struct lustre_handle *)lockh)->cookie,
- new_inode, new_inode->i_ino, new_inode->i_generation);
- }
-#endif
lock->l_ast_data = data;
l_unlock(&lock->l_resource->lr_namespace->ns_lock);
LDLM_LOCK_PUT(lock);
ENTRY;
LASSERT(it);
- CDEBUG(D_DLMTRACE,"name: %.*s in obj "DFID3", intent: %s flags %#o\n",
- op_data->namelen, op_data->name, PFID3(&op_data->fid1),
- ldlm_it2str(it->it_op), it->it_flags);
+ CDEBUG(D_DLMTRACE, "(name: %.*s,"DFID3") in obj "DFID3
+ ", intent: %s flags %#o\n",
+ op_data->namelen, op_data->name, PFID3(&op_data->fid2),
+ PFID3(&op_data->fid1), ldlm_it2str(it->it_op), it->it_flags);
if (fid_is_sane(&op_data->fid2) &&
(it->it_op & (IT_LOOKUP | IT_GETATTR))) {
if (lock) {
ldlm_policy_data_t policy = lock->l_policy_data;
LDLM_DEBUG(lock, "matching against this");
+
+ LASSERTF(fid_res_name_eq(&mdt_body->fid1,
+ &lock->l_resource->lr_name),
+ "Lock res_id: %lu/%lu/%lu, fid: %lu/%lu/%lu.\n",
+ (unsigned long)lock->l_resource->lr_name.name[0],
+ (unsigned long)lock->l_resource->lr_name.name[1],
+ (unsigned long)lock->l_resource->lr_name.name[2],
+ (unsigned long)fid_seq(&mdt_body->fid1),
+ (unsigned long)fid_oid(&mdt_body->fid1),
+ (unsigned long)fid_ver(&mdt_body->fid1));
LDLM_LOCK_PUT(lock);
+
memcpy(&old_lock, &lockh, sizeof(lockh));
if (ldlm_lock_match(NULL, LDLM_FL_BLOCK_GRANTED, NULL,
LDLM_IBITS, &policy, LCK_NL, &old_lock)) {
ENTRY;
LASSERT(info->mti_object != NULL);
+ CDEBUG(D_INFO, "getattr with lock for "DFID3"/%s, ldlm_rep = %p\n",
+ PFID3(mdt_object_fid(parent)), name, ldlm_rep);
name = req_capsule_client_get(&info->mti_pill, &RMF_NAME);
if (name == NULL)
GOTO(out, result);
}
- CDEBUG(D_INFO, DFID3"/%s, ldlm_rep = %p\n",
- PFID3(mdt_object_fid(parent)), name, ldlm_rep);
/*step 1: lock parent */
lhp = &info->mti_lh[MDT_LH_PARENT];
lhp->mlh_mode = LCK_CR;
result = mdt_getattr_internal(info, child, ldlm_rep ? 0 : 1);
if (result != 0)
mdt_object_unlock(info, child, lhc, 1);
+ else {
+ struct ldlm_lock *lock;
+ struct ldlm_res_id *res_id;
+ lock = ldlm_handle2lock(&lhc->mlh_lh);
+ if (lock) {
+ res_id = &lock->l_resource->lr_name;
+ LDLM_DEBUG(lock, "we will return this lock client\n");
+ LASSERTF(fid_res_name_eq(mdt_object_fid(child),
+ &lock->l_resource->lr_name),
+ "Lock res_id: %lu/%lu/%lu, Fid: "DFID3".\n",
+ (unsigned long)res_id->name[0],
+ (unsigned long)res_id->name[1],
+ (unsigned long)res_id->name[2],
+ PFID3(mdt_object_fid(child)));
+ LDLM_LOCK_PUT(lock);
+ }
+
+ }
mdt_object_put(info->mti_ctxt, child);
EXIT;
int rc;
int i;
ENTRY;
- RETURN(-EOPNOTSUPP);
if (MDT_FAIL_CHECK(OBD_FAIL_MDS_READPAGE_PACK))
RETURN(-ENOMEM);
return name;
}
-/*
- * Return true if resource is for object identified by fid.
- */
-int fid_res_name_eq(const struct lu_fid *f, const struct ldlm_res_id *name)
-{
- return name->name[0] == fid_seq(f) &&
- name->name[1] == fid_oid(f) &&
- name->name[2] == fid_ver(f);
-}
-
/* issues dlm lock on passed @ns, @f stores it lock handle into @lh. */
int fid_lock(struct ldlm_namespace *ns, const struct lu_fid *f,
struct lustre_handle *lh, ldlm_mode_t mode,
new_lock->l_flags &= ~LDLM_FL_LOCAL;
- LDLM_LOCK_PUT(new_lock);
l_unlock(&new_lock->l_resource->lr_namespace->ns_lock);
+ LDLM_LOCK_PUT(new_lock);
RETURN(ELDLM_LOCK_REPLACED);
}