* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, Whamcloud, Inc.
+ * Copyright (c) 2011, 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <sys/queue.h>
#include "llite_lib.h"
+#include <lustre_fid.h>
void ll_intent_drop_lock(struct lookup_intent *it)
{
switch (flag) {
case LDLM_CB_BLOCKING:
ldlm_lock2handle(lock, &lockh);
- rc = ldlm_cli_cancel(&lockh);
+ rc = ldlm_cli_cancel(&lockh, 0);
if (rc < 0) {
CDEBUG(D_INODE, "ldlm_cli_cancel: %d\n", rc);
RETURN(rc);
}
break;
case LDLM_CB_CANCELING: {
- struct inode *inode = llu_inode_from_lock(lock);
+ struct inode *inode = llu_inode_from_resource_lock(lock);
struct llu_inode_info *lli;
struct intnl_stat *st;
__u64 bits = lock->l_policy_data.l_inodebits.bits;
struct lu_fid *fid;
+ /* Inode is set to lock->l_resource->lr_lvb_inode
+ * for mdc - bug 24555 */
+ LASSERT(lock->l_ast_data == NULL);
+
/* Invalidate all dentries associated with this inode */
if (inode == NULL)
break;
if (bits & MDS_INODELOCK_UPDATE)
lli->lli_flags &= ~LLIF_MDS_SIZE_LOCK;
- fid = &lli->lli_fid;
- if (lock->l_resource->lr_name.name[0] != fid_seq(fid) ||
- lock->l_resource->lr_name.name[1] != fid_oid(fid) ||
- lock->l_resource->lr_name.name[2] != fid_ver(fid)) {
- LDLM_ERROR(lock,"data mismatch with ino %llu/%llu/%llu",
- (long long)fid_seq(fid),
- (long long)fid_oid(fid),
- (long long)fid_ver(fid));
- }
+ fid = &lli->lli_fid;
+ if (!fid_res_name_eq(fid, &lock->l_resource->lr_name))
+ LDLM_ERROR(lock, "data mismatch with object "
+ DFID" (%p)", PFID(fid), inode);
if (S_ISDIR(st->st_mode) &&
(bits & MDS_INODELOCK_UPDATE)) {
CDEBUG(D_INODE, "invalidating inode %llu\n",
RETURN(0);
}
+struct inode *llu_inode_from_resource_lock(struct ldlm_lock *lock)
+{
+ struct inode *inode;
+ lock_res_and_lock(lock);
+
+ if (lock->l_resource->lr_lvb_inode) {
+ inode = (struct inode *)lock->l_resource->lr_lvb_inode;
+ I_REF(inode);
+ } else
+ inode = NULL;
+
+ unlock_res_and_lock(lock);
+ return inode;
+}
+
struct inode *llu_inode_from_lock(struct ldlm_lock *lock)
{
struct inode *inode;
icbd.icbd_child = pnode;
icbd.icbd_parent = parent;
- if (it->it_op & IT_CREAT ||
- (it->it_op & IT_OPEN && it->it_create_mode & O_CREAT)) {
- opc = LUSTRE_OPC_CREATE;
- } else {
- opc = LUSTRE_OPC_ANY;
- }
-
+ if (it->it_op & IT_CREAT)
+ opc = LUSTRE_OPC_CREATE;
+ else
+ opc = LUSTRE_OPC_ANY;
+
llu_prep_md_op_data(&op_data, parent, NULL,
pnode->p_base->pb_name.name,
pnode->p_base->pb_name.len, flags, opc);