extern void lustre_swab_ll_fid (struct ll_fid *fid);
+/* NOTE: until Lustre 1.8.7/2.1.1 the fid_ver() was packed into name[2],
+ * but was moved into name[1] along with the OID to avoid consuming the
+ * renaming name[2,3] fields that need to be used for the quota identifier. */
enum {
/** put FID sequence at this offset in ldlm_res_id. */
LUSTRE_RES_ID_SEQ_OFF = 0,
- /** put FID oid at this offset in ldlm_res_id. */
- LUSTRE_RES_ID_OID_OFF = 1,
+ /** put FID OID and VER at this offset in ldlm_res_id. */
+ LUSTRE_RES_ID_VER_OID_OFF = 1,
/** put FID version at this offset in ldlm_res_id. */
- LUSTRE_RES_ID_VER_OFF = 2,
+ LUSTRE_RES_ID_WAS_VER_OFF = 2,
/** put pdo hash at this offset in ldlm_res_id. */
LUSTRE_RES_ID_HSH_OFF = 3
};
}
EXPORT_SYMBOL(range_be_to_cpu);
-/**
+/**
* Build (DLM) resource name from fid.
+ *
+ * NOTE: until Lustre 1.8.7/2.1.1 the fid_ver() was packed into name[2],
+ * but was moved into name[1] along with the OID to avoid consuming the
+ * renaming name[2,3] fields that need to be used for the quota identifier.
*/
struct ldlm_res_id *
fid_build_reg_res_name(const struct lu_fid *f, struct ldlm_res_id *name)
-{
+{
memset(name, 0, sizeof *name);
name->name[LUSTRE_RES_ID_SEQ_OFF] = fid_seq(f);
- name->name[LUSTRE_RES_ID_OID_OFF] = fid_oid(f);
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] = fid_oid(f);
if (!fid_is_igif(f))
- name->name[LUSTRE_RES_ID_VER_OFF] = fid_ver(f);
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] |= (__u64)fid_ver(f)<<32;
return name;
}
EXPORT_SYMBOL(fid_build_reg_res_name);
int fid_res_name_eq(const struct lu_fid *f, const struct ldlm_res_id *name)
{
int ret;
-
+
ret = name->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(f) &&
- name->name[LUSTRE_RES_ID_OID_OFF] == fid_oid(f);
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_oid(f);
if (!fid_is_igif(f))
- ret = ret && name->name[LUSTRE_RES_ID_VER_OFF] == fid_ver(f);
+ ret &= name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_ver(f);
return ret;
}
EXPORT_SYMBOL(fid_res_name_eq);