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_LMM_VER)
+ OBD_INCOMPAT_LMM_VER | OBD_INCOMPAT_MULTI_OI)
#define MDT_COS_DEFAULT (0)
struct mdt_object {
MDT_TXN_LAST_RCVD_WRITE_OP,
};
+enum mdt_obj_exist{
+ MDT_OBJ_MUST_EXIST,
+ MDT_OBJ_MAY_NOT_EXIST,
+};
+
static inline const struct md_device_operations *
mdt_child_ops(struct mdt_device * m)
{
class_export_put(exp);
}
+static inline const char *mdt_obj_dev_name(const struct mdt_object *obj)
+{
+ return lu_dev_name(obj->mot_obj.mo_lu.lo_dev);
+}
+
int mdt_get_disposition(struct ldlm_reply *rep, int flag);
void mdt_set_disposition(struct mdt_thread_info *info,
struct ldlm_reply *rep, int flag);
struct mdt_object *mdt_object_find(const struct lu_env *,
struct mdt_device *,
- const struct lu_fid *);
+ const struct lu_fid *,
+ enum mdt_obj_exist check_exist);
struct mdt_object *mdt_object_find_lock(struct mdt_thread_info *,
const struct lu_fid *,
struct mdt_lock_handle *,
- __u64);
+ __u64 ibits,
+ enum mdt_obj_exist check_exist);
void mdt_object_unlock_put(struct mdt_thread_info *,
struct mdt_object *,
struct mdt_lock_handle *,
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);