* 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/
cfs_proc_dir_entry_t *mdt_proc_entry;
struct lprocfs_stats *mdt_stats;
int mdt_sec_level;
+ struct rename_stats mdt_rename_stats;
};
#define MDT_SERVICE_WATCHDOG_FACTOR (2)
#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_FID | OBD_INCOMPAT_IAM_DIR | \
+ 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;
struct mdt_lock_handle *,
int decref);
+void mdt_client_compatibility(struct mdt_thread_info *info);
+
int mdt_close_unpack(struct mdt_thread_info *info);
int mdt_reint_unpack(struct mdt_thread_info *info, __u32 op);
int mdt_reint_rec(struct mdt_thread_info *, struct mdt_lock_handle *);
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)
LPROC_MDT_SETXATTR,
LPROC_MDT_STATFS,
LPROC_MDT_SYNC,
+ LPROC_MDT_SAMEDIR_RENAME,
+ LPROC_MDT_CROSSDIR_RENAME,
LPROC_MDT_LAST,
};
void mdt_counter_incr(struct obd_export *exp, int opcode);
void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars);
int mdt_procfs_init(struct mdt_device *mdt, const char *name);
int mdt_procfs_fini(struct mdt_device *mdt);
+void mdt_rename_counter_tally(struct mdt_thread_info *info,
+ struct mdt_device *mdt, struct obd_export *exp,
+ struct mdt_object *src, struct mdt_object *tgt);
void mdt_time_start(const struct mdt_thread_info *info);
void mdt_time_end(const struct mdt_thread_info *info, int idx);
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);