-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * 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",
if (md.lsm != NULL)
obd_free_memmd(sbi->ll_dt_exp, &md.lsm);
RETURN(inode ? PTR_ERR(inode) : -ENOMEM);
- } else if (md.lsm != NULL &&
- llu_i2info(inode)->lli_smd != md.lsm) {
+ } else if (md.lsm != NULL) {
obd_free_memmd(sbi->ll_dt_exp, &md.lsm);
}
/* If this is a stat, get the authoritative file size */
if (it->it_op == IT_GETATTR && S_ISREG(st->st_mode) &&
- lli->lli_smd != NULL) {
- struct lov_stripe_md *lsm = lli->lli_smd;
+ lli->lli_has_smd) {
ldlm_error_t rc;
- LASSERT(lsm->lsm_object_id != 0);
-
/* bug 2334: drop MDS lock before acquiring OST lock */
ll_intent_drop_lock(it);
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);