The DLM code always assumes that the request buffer storing the LVB is
of type ost_lvb.
This patch allows new LVB types to be defined and used. Although there
is still one single LVB structure defined (i.e. ost_lvb), the new
quota architecture will define its own LVB soon.
Signed-off-by: Johann Lombardi <johann@whamcloud.com>
Change-Id: I497d774eb4b66029ff2755739bbe75190f6aeee8
Reviewed-on: http://review.whamcloud.com/2649
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Niu Yawei <niu@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
-extern void lustre_swab_ost_lvb(struct ost_lvb *);
-
extern void lustre_swab_ldlm_policy_data (ldlm_wire_policy_data_t *d);
extern void lustre_swab_ldlm_policy_data (ldlm_wire_policy_data_t *d);
+/* Similarly to ldlm_wire_policy_data_t, there is one common swabber for all
+ * LVB types. As a result, any new LVB structure must match the fields of the
+ * ost_lvb structure. */
+union ldlm_wire_lvb {
+ struct ost_lvb l_ost;
+};
+
+extern void lustre_swab_lvb(union ldlm_wire_lvb *);
+
struct ldlm_intent {
__u64 opc;
};
struct ldlm_intent {
__u64 opc;
};
EXPORT_SYMBOL(RMF_LDLM_INTENT);
struct req_msg_field RMF_DLM_LVB =
EXPORT_SYMBOL(RMF_LDLM_INTENT);
struct req_msg_field RMF_DLM_LVB =
- DEFINE_MSGF("dlm_lvb", 0, sizeof(struct ost_lvb), lustre_swab_ost_lvb,
+ DEFINE_MSGF("dlm_lvb", 0, sizeof(union ldlm_wire_lvb), lustre_swab_lvb,
NULL);
EXPORT_SYMBOL(RMF_DLM_LVB);
NULL);
EXPORT_SYMBOL(RMF_DLM_LVB);
-void lustre_swab_ost_lvb(struct ost_lvb *lvb)
+void lustre_swab_lvb(union ldlm_wire_lvb *lvb)
- __swab64s(&lvb->lvb_size);
- __swab64s(&lvb->lvb_mtime);
- __swab64s(&lvb->lvb_atime);
- __swab64s(&lvb->lvb_ctime);
- __swab64s(&lvb->lvb_blocks);
+ /* The ldlm_wire_lvb union represents all the possible LVB types.
+ * Unfortunately, there is no way to know what member of the union we
+ * are dealing with at this point. Therefore, all LVB structures must
+ * have fields of the same types, although used for different purposes
+ */
+ __swab64s(&lvb->l_ost.lvb_size);
+ __swab64s(&lvb->l_ost.lvb_mtime);
+ __swab64s(&lvb->l_ost.lvb_atime);
+ __swab64s(&lvb->l_ost.lvb_ctime);
+ __swab64s(&lvb->l_ost.lvb_blocks);
}
void lustre_swab_mdt_body (struct mdt_body *b)
}
void lustre_swab_mdt_body (struct mdt_body *b)
EXPORT_SYMBOL(lustre_swab_niobuf_remote);
EXPORT_SYMBOL(lustre_swab_ost_body);
EXPORT_SYMBOL(lustre_swab_ost_last_id);
EXPORT_SYMBOL(lustre_swab_niobuf_remote);
EXPORT_SYMBOL(lustre_swab_ost_body);
EXPORT_SYMBOL(lustre_swab_ost_last_id);
-EXPORT_SYMBOL(lustre_swab_ost_lvb);
+EXPORT_SYMBOL(lustre_swab_lvb);
EXPORT_SYMBOL(lustre_swab_mdt_body);
EXPORT_SYMBOL(lustre_swab_mdt_ioepoch);
EXPORT_SYMBOL(lustre_swab_obd_quotactl);
EXPORT_SYMBOL(lustre_swab_mdt_body);
EXPORT_SYMBOL(lustre_swab_mdt_ioepoch);
EXPORT_SYMBOL(lustre_swab_obd_quotactl);
#define lustre_swab_ost_last_id NULL
#define lustre_swab_fiemap NULL
#define lustre_swab_qdata NULL
#define lustre_swab_ost_last_id NULL
#define lustre_swab_fiemap NULL
#define lustre_swab_qdata NULL
-#define lustre_swab_ost_lvb NULL
+#define lustre_swab_lvb NULL
#define lustre_swab_mgs_config_body NULL
#define lustre_swab_mgs_config_res NULL
#define dump_rniobuf NULL
#define lustre_swab_mgs_config_body NULL
#define lustre_swab_mgs_config_res NULL
#define dump_rniobuf NULL