summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
30fd56b)
Until Lustre 1.8.7/2.1.1 the FID version was packed into name[2].
However, this leaves very little room in the LDLM resource name
for other uses. The upcoming quota code needs to store another
FID into the LDLM resource to allow directory tree quotas, and
managed by the DLM.
The 32-bit VER, which is currently always 0, is moved into the high
bits of name[1] along with the 32-bit OID, to avoid consuming the
name[2] field. Since future use of the FID version (including
snapshots, pools, etc) will need changes on the client side anyway,
there will never be non-zero VER on an existing client.
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: If1e500cfb277dfc25bc056bb0c5763e48e7dccdf
Reviewed-on: http://review.whamcloud.com/2271
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Johann Lombardi <johann@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
extern void lustre_swab_ll_fid (struct ll_fid *fid);
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
+ * name[2,3] fields that need to be used for the quota id (also a FID). */
+enum {
+ LUSTRE_RES_ID_SEQ_OFF = 0,
+ LUSTRE_RES_ID_VER_OID_OFF = 1,
+ LUSTRE_RES_ID_WAS_VER_OFF = 2, /* see note above */
+ LUSTRE_RES_ID_HSH_OFF = 3
+};
+
#define MDS_STATUS_CONN 1
#define MDS_STATUS_LOV 2
#define MDS_STATUS_CONN 1
#define MDS_STATUS_LOV 2
-enum {
- LUSTRE_RES_ID_SEQ_OFF = 0,
- LUSTRE_RES_ID_OID_OFF = 1,
- LUSTRE_RES_ID_VER_OFF = 2,
- LUSTRE_RES_ID_HSH_OFF = 3
-};
-
- * Build (DLM) resource name from fid.
+ * 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.
*/
static inline struct ldlm_res_id *
fid_build_reg_res_name(const struct lu_fid *f,
*/
static inline struct ldlm_res_id *
fid_build_reg_res_name(const struct lu_fid *f,
{
memset(name, 0, sizeof *name);
name->name[LUSTRE_RES_ID_SEQ_OFF] = fid_seq(f);
{
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_OFF] = fid_ver(f);
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] = fid_ver_oid(f);
static inline int fid_res_name_eq(const struct lu_fid *f,
const struct ldlm_res_id *name)
{
static inline int fid_res_name_eq(const struct lu_fid *f,
const struct ldlm_res_id *name)
{
- return
- 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_OFF] == fid_ver(f);
+ return name->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(f) &&
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_ver_oid(f);
__u32 val;
fid.f_seq = id->name[LUSTRE_RES_ID_SEQ_OFF];
__u32 val;
fid.f_seq = id->name[LUSTRE_RES_ID_SEQ_OFF];
- fid.f_oid = (__u32)id->name[LUSTRE_RES_ID_OID_OFF];
- fid.f_ver = (__u32)id->name[LUSTRE_RES_ID_VER_OFF];
+ fid.f_oid = (__u32)id->name[LUSTRE_RES_ID_VER_OID_OFF];
+ fid.f_ver = (__u32)(id->name[LUSTRE_RES_ID_VER_OID_OFF] >> 32);
hash = fid_flatten32(&fid);
hash += (hash >> 4) + (hash << 12); /* mixing oid and seq */
hash = fid_flatten32(&fid);
hash += (hash >> 4) + (hash << 12); /* mixing oid and seq */
CLASSERT(LDLM_FLOCK == 12);
CLASSERT(LDLM_IBITS == 13);
CLASSERT(LDLM_MAX_TYPE == 14);
CLASSERT(LDLM_FLOCK == 12);
CLASSERT(LDLM_IBITS == 13);
CLASSERT(LDLM_MAX_TYPE == 14);
+ CLASSERT(LUSTRE_RES_ID_SEQ_OFF == 0);
+ CLASSERT(LUSTRE_RES_ID_VER_OID_OFF == 1);
+ CLASSERT(LUSTRE_RES_ID_HSH_OFF == 3);
LASSERTF(OBD_PING == 400, "found %lld\n",
(long long)OBD_PING);
LASSERTF(OBD_LOG_CANCEL == 401, "found %lld\n",
LASSERTF(OBD_PING == 400, "found %lld\n",
(long long)OBD_PING);
LASSERTF(OBD_LOG_CANCEL == 401, "found %lld\n",
CHECK_CVALUE(LDLM_IBITS);
CHECK_CVALUE(LDLM_MAX_TYPE);
CHECK_CVALUE(LDLM_IBITS);
CHECK_CVALUE(LDLM_MAX_TYPE);
+ CHECK_CVALUE(LUSTRE_RES_ID_SEQ_OFF);
+ CHECK_CVALUE(LUSTRE_RES_ID_VER_OID_OFF);
+ /* CHECK_CVALUE(LUSTRE_RES_ID_WAS_VER_OFF); packed with OID */
+ CHECK_CVALUE(LUSTRE_RES_ID_HSH_OFF);
+
CHECK_VALUE(OBD_PING);
CHECK_VALUE(OBD_LOG_CANCEL);
CHECK_VALUE(OBD_QC_CALLBACK);
CHECK_VALUE(OBD_PING);
CHECK_VALUE(OBD_LOG_CANCEL);
CHECK_VALUE(OBD_QC_CALLBACK);
CLASSERT(LDLM_FLOCK == 12);
CLASSERT(LDLM_IBITS == 13);
CLASSERT(LDLM_MAX_TYPE == 14);
CLASSERT(LDLM_FLOCK == 12);
CLASSERT(LDLM_IBITS == 13);
CLASSERT(LDLM_MAX_TYPE == 14);
+ CLASSERT(LUSTRE_RES_ID_SEQ_OFF == 0);
+ CLASSERT(LUSTRE_RES_ID_VER_OID_OFF == 1);
+ CLASSERT(LUSTRE_RES_ID_HSH_OFF == 3);
LASSERTF(OBD_PING == 400, "found %lld\n",
(long long)OBD_PING);
LASSERTF(OBD_LOG_CANCEL == 401, "found %lld\n",
LASSERTF(OBD_PING == 400, "found %lld\n",
(long long)OBD_PING);
LASSERTF(OBD_LOG_CANCEL == 401, "found %lld\n",