* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011 Whamcloud, Inc.
- *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#define MDT_ROCOMPAT_SUPP (OBD_ROCOMPAT_LOVOBJID)
#define MDT_INCOMPAT_SUPP (OBD_INCOMPAT_MDT | OBD_INCOMPAT_COMMON_LR | \
OBD_INCOMPAT_FID | OBD_INCOMPAT_IAM_DIR | \
- OBD_INCOMPAT_LMM_VER)
+ OBD_INCOMPAT_LMM_VER | OBD_INCOMPAT_MULTI_OI)
#define MDT_COS_DEFAULT (0)
struct mdt_object {
int mot_ioepoch_count;
int mot_writecount;
/* Lock to protect object's IO epoch. */
- cfs_semaphore_t mot_ioepoch_sem;
+ cfs_mutex_t mot_ioepoch_mutex;
/* Lock to protect create_data */
- cfs_semaphore_t mot_lov_sem;
+ cfs_mutex_t mot_lov_mutex;
};
enum mdt_object_flags {
return lu_object_exists(&o->mot_obj.mo_lu);
}
-static inline const struct lu_fid *mdt_object_fid(struct mdt_object *o)
+static inline const struct lu_fid *mdt_object_fid(const struct mdt_object *o)
{
return lu_object_fid(&o->mot_obj.mo_lu);
}
+static inline int mdt_object_obf(const struct mdt_object *o)
+{
+ return lu_fid_eq(mdt_object_fid(o), &LU_OBF_FID);
+}
+
static inline struct lu_site *mdt_lu_site(const struct mdt_device *mdt)
{
return mdt->mdt_md_dev.md_lu_dev.ld_site;
extern struct lu_context_key mdt_thread_key;
/* debug issues helper starts here*/
-static inline void mdt_fail_write(const struct lu_env *env,
- struct dt_device *dd, int id)
+static inline int mdt_fail_write(const struct lu_env *env,
+ struct dt_device *dd, int id)
{
if (OBD_FAIL_CHECK_ORSET(id, OBD_FAIL_ONCE)) {
CERROR(LUSTRE_MDT_NAME": cfs_fail_loc=%x, fail write ops\n",
id);
- dd->dd_ops->dt_ro(env, dd);
+ return dd->dd_ops->dt_ro(env, dd);
/* We set FAIL_ONCE because we never "un-fail" a device */
}
+
+ return 0;
}
static inline struct mdt_export_data *mdt_req2med(struct ptlrpc_request *req)
ci = md_capainfo(info->mti_env);
LASSERT(ci);
- ci->mc_fid[offset] = fid;
+ ci->mc_fid[offset] = *fid;
ci->mc_capa[offset] = capa;
}
if (!ci)
return;
for (i = 0; i < MD_CAPAINFO_MAX; i++) {
- if (!ci->mc_fid[i])
- continue;
if (!ci->mc_capa[i]) {
CERROR("no capa for index %d "DFID"\n",
- i, PFID(ci->mc_fid[i]));
+ i, PFID(&ci->mc_fid[i]));
continue;
}
if (ci->mc_capa[i] == BYPASS_CAPA) {
CERROR("bypass for index %d "DFID"\n",
- i, PFID(ci->mc_fid[i]));
+ i, PFID(&ci->mc_fid[i]));
continue;
}
DEBUG_CAPA(D_ERROR, ci->mc_capa[i], "index %d", i);