* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2016, Intel Corporation.
+ * Copyright (c) 2011, 2017, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <libcfs/libcfs.h>
-#include <lustre/ll_fiemap.h>
-
#include <llog_swab.h>
#include <lustre_net.h>
#include <lustre_swab.h>
}
static inline int lustre_msg_check_version_v2(struct lustre_msg_v2 *msg,
- __u32 version)
+ enum lustre_msg_version version)
{
- __u32 ver = lustre_msg_get_version(msg);
- return (ver & LUSTRE_VERSION_MASK) != version;
+ enum lustre_msg_version ver = lustre_msg_get_version(msg);
+
+ return (ver & LUSTRE_VERSION_MASK) != version;
}
-int lustre_msg_check_version(struct lustre_msg *msg, __u32 version)
+int lustre_msg_check_version(struct lustre_msg *msg,
+ enum lustre_msg_version version)
{
#define LUSTRE_MSG_MAGIC_V1 0x0BD00BD0
switch (msg->lm_magic) {
return 0;
}
}
+EXPORT_SYMBOL(lustre_packed_msg_size);
void lustre_init_msg_v2(struct lustre_msg_v2 *msg, int count, __u32 *lens,
char **bufs)
sizeof(struct ptlrpc_body_v2));
}
-__u32 lustre_msghdr_get_flags(struct lustre_msg *msg)
+enum lustre_msghdr lustre_msghdr_get_flags(struct lustre_msg *msg)
{
switch (msg->lm_magic) {
case LUSTRE_MSG_MAGIC_V2:
case LUSTRE_MSG_MAGIC_V2: {
struct ptlrpc_body *pb = lustre_msg_ptlrpc_body(msg);
LASSERTF(pb != NULL, "invalid msg %p: no ptlrpc body!\n", msg);
- pb->pb_flags &= ~(MSG_GEN_FLAG_MASK & flags);
+ pb->pb_flags &= ~flags;
+
return;
}
default:
}
EXPORT_SYMBOL(lustre_msg_get_type);
-__u32 lustre_msg_get_version(struct lustre_msg *msg)
+enum lustre_msg_version lustre_msg_get_version(struct lustre_msg *msg)
{
switch (msg->lm_magic) {
case LUSTRE_MSG_MAGIC_V2: {
LASSERTF(pb, "invalid msg %p: no ptlrpc body!\n", msg);
if (jobid != NULL)
- memcpy(pb->pb_jobid, jobid, LUSTRE_JOBID_SIZE);
+ memcpy(pb->pb_jobid, jobid, sizeof(pb->pb_jobid));
else if (pb->pb_jobid[0] == '\0')
- lustre_get_jobid(pb->pb_jobid);
+ lustre_get_jobid(pb->pb_jobid, sizeof(pb->pb_jobid));
return;
}
default:
/* byte flipping routines for all wire types declared in
* lustre_idl.h implemented here.
*/
-void lustre_swab_ptlrpc_body(struct ptlrpc_body *b)
-{
- __swab32s (&b->pb_type);
- __swab32s (&b->pb_version);
- __swab32s (&b->pb_opc);
- __swab32s (&b->pb_status);
- __swab64s (&b->pb_last_xid);
- __swab16s (&b->pb_tag);
- __swab64s (&b->pb_last_committed);
- __swab64s (&b->pb_transno);
- __swab32s (&b->pb_flags);
- __swab32s (&b->pb_op_flags);
- __swab32s (&b->pb_conn_cnt);
- __swab32s (&b->pb_timeout);
- __swab32s (&b->pb_service_time);
- __swab32s (&b->pb_limit);
- __swab64s (&b->pb_slv);
- __swab64s (&b->pb_pre_versions[0]);
- __swab64s (&b->pb_pre_versions[1]);
- __swab64s (&b->pb_pre_versions[2]);
- __swab64s (&b->pb_pre_versions[3]);
- __swab64s(&b->pb_mbits);
- CLASSERT(offsetof(typeof(*b), pb_padding0) != 0);
- CLASSERT(offsetof(typeof(*b), pb_padding1) != 0);
- CLASSERT(offsetof(typeof(*b), pb_padding64_0) != 0);
- CLASSERT(offsetof(typeof(*b), pb_padding64_1) != 0);
- CLASSERT(offsetof(typeof(*b), pb_padding64_2) != 0);
+void lustre_swab_ptlrpc_body(struct ptlrpc_body *body)
+{
+ __swab32s(&body->pb_type);
+ __swab32s(&body->pb_version);
+ __swab32s(&body->pb_opc);
+ __swab32s(&body->pb_status);
+ __swab64s(&body->pb_last_xid);
+ __swab16s(&body->pb_tag);
+ CLASSERT(offsetof(typeof(*body), pb_padding0) != 0);
+ CLASSERT(offsetof(typeof(*body), pb_padding1) != 0);
+ __swab64s(&body->pb_last_committed);
+ __swab64s(&body->pb_transno);
+ __swab32s(&body->pb_flags);
+ __swab32s(&body->pb_op_flags);
+ __swab32s(&body->pb_conn_cnt);
+ __swab32s(&body->pb_timeout);
+ __swab32s(&body->pb_service_time);
+ __swab32s(&body->pb_limit);
+ __swab64s(&body->pb_slv);
+ __swab64s(&body->pb_pre_versions[0]);
+ __swab64s(&body->pb_pre_versions[1]);
+ __swab64s(&body->pb_pre_versions[2]);
+ __swab64s(&body->pb_pre_versions[3]);
+ __swab64s(&body->pb_mbits);
+ CLASSERT(offsetof(typeof(*body), pb_padding64_0) != 0);
+ CLASSERT(offsetof(typeof(*body), pb_padding64_1) != 0);
+ CLASSERT(offsetof(typeof(*body), pb_padding64_2) != 0);
/* While we need to maintain compatibility between
* clients and servers without ptlrpc_body_v2 (< 2.3)
* do not swab any fields beyond pb_jobid, as we are
* using this swab function for both ptlrpc_body
* and ptlrpc_body_v2. */
- CLASSERT(offsetof(typeof(*b), pb_jobid) != 0);
+ /* pb_jobid is an ASCII string and should not be swabbed */
+ CLASSERT(offsetof(typeof(*body), pb_jobid) != 0);
}
void lustre_swab_connect(struct obd_connect_data *ocd)
CLASSERT(offsetof(typeof(*ocd), paddingF) != 0);
}
+static void lustre_swab_ost_layout(struct ost_layout *ol)
+{
+ __swab32s(&ol->ol_stripe_size);
+ __swab32s(&ol->ol_stripe_count);
+ __swab64s(&ol->ol_comp_start);
+ __swab64s(&ol->ol_comp_end);
+ __swab32s(&ol->ol_comp_id);
+}
+
void lustre_swab_obdo (struct obdo *o)
{
- __swab64s (&o->o_valid);
+ __swab64s(&o->o_valid);
lustre_swab_ost_id(&o->o_oi);
- __swab64s (&o->o_parent_seq);
- __swab64s (&o->o_size);
- __swab64s (&o->o_mtime);
- __swab64s (&o->o_atime);
- __swab64s (&o->o_ctime);
- __swab64s (&o->o_blocks);
- __swab64s (&o->o_grant);
- __swab32s (&o->o_blksize);
- __swab32s (&o->o_mode);
- __swab32s (&o->o_uid);
- __swab32s (&o->o_gid);
- __swab32s (&o->o_flags);
- __swab32s (&o->o_nlink);
- __swab32s (&o->o_parent_oid);
- __swab32s (&o->o_misc);
- __swab64s (&o->o_ioepoch);
- __swab32s (&o->o_stripe_idx);
- __swab32s (&o->o_parent_ver);
- /* o_handle is opaque */
- /* o_lcookie is swabbed elsewhere */
- __swab32s (&o->o_uid_h);
- __swab32s (&o->o_gid_h);
- __swab64s (&o->o_data_version);
- CLASSERT(offsetof(typeof(*o), o_padding_4) != 0);
- CLASSERT(offsetof(typeof(*o), o_padding_5) != 0);
- CLASSERT(offsetof(typeof(*o), o_padding_6) != 0);
+ __swab64s(&o->o_parent_seq);
+ __swab64s(&o->o_size);
+ __swab64s(&o->o_mtime);
+ __swab64s(&o->o_atime);
+ __swab64s(&o->o_ctime);
+ __swab64s(&o->o_blocks);
+ __swab64s(&o->o_grant);
+ __swab32s(&o->o_blksize);
+ __swab32s(&o->o_mode);
+ __swab32s(&o->o_uid);
+ __swab32s(&o->o_gid);
+ __swab32s(&o->o_flags);
+ __swab32s(&o->o_nlink);
+ __swab32s(&o->o_parent_oid);
+ __swab32s(&o->o_misc);
+ __swab64s(&o->o_ioepoch);
+ __swab32s(&o->o_stripe_idx);
+ __swab32s(&o->o_parent_ver);
+ lustre_swab_ost_layout(&o->o_layout);
+ __swab32s(&o->o_layout_version);
+ __swab32s(&o->o_uid_h);
+ __swab32s(&o->o_gid_h);
+ __swab64s(&o->o_data_version);
+ __swab32s(&o->o_projid);
+ CLASSERT(offsetof(typeof(*o), o_padding_4) != 0);
+ CLASSERT(offsetof(typeof(*o), o_padding_5) != 0);
+ CLASSERT(offsetof(typeof(*o), o_padding_6) != 0);
}
EXPORT_SYMBOL(lustre_swab_obdo);
void lustre_swab_obd_statfs (struct obd_statfs *os)
{
- __swab64s (&os->os_type);
- __swab64s (&os->os_blocks);
- __swab64s (&os->os_bfree);
- __swab64s (&os->os_bavail);
- __swab64s (&os->os_files);
- __swab64s (&os->os_ffree);
- /* no need to swab os_fsid */
- __swab32s (&os->os_bsize);
- __swab32s (&os->os_namelen);
- __swab64s (&os->os_maxbytes);
- __swab32s (&os->os_state);
- CLASSERT(offsetof(typeof(*os), os_fprecreated) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare2) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare3) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare4) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare5) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare6) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare7) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare8) != 0);
- CLASSERT(offsetof(typeof(*os), os_spare9) != 0);
+ __swab64s(&os->os_type);
+ __swab64s(&os->os_blocks);
+ __swab64s(&os->os_bfree);
+ __swab64s(&os->os_bavail);
+ __swab64s(&os->os_files);
+ __swab64s(&os->os_ffree);
+ /* no need to swab os_fsid */
+ __swab32s(&os->os_bsize);
+ __swab32s(&os->os_namelen);
+ __swab64s(&os->os_maxbytes);
+ __swab32s(&os->os_state);
+ __swab32s(&os->os_fprecreated);
+ CLASSERT(offsetof(typeof(*os), os_spare2) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare3) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare4) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare5) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare6) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare7) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare8) != 0);
+ CLASSERT(offsetof(typeof(*os), os_spare9) != 0);
}
void lustre_swab_obd_ioobj(struct obd_ioobj *ioo)
__swab64s(&b->mbo_atime);
__swab64s(&b->mbo_ctime);
__swab64s(&b->mbo_blocks);
- __swab64s(&b->mbo_ioepoch);
+ __swab64s(&b->mbo_version);
__swab64s(&b->mbo_t_state);
__swab32s(&b->mbo_fsuid);
__swab32s(&b->mbo_fsgid);
__swab32s(&b->mbo_flags);
__swab32s(&b->mbo_rdev);
__swab32s(&b->mbo_nlink);
- CLASSERT(offsetof(typeof(*b), mbo_unused2) != 0);
+ __swab32s(&b->mbo_layout_gen);
__swab32s(&b->mbo_suppgid);
__swab32s(&b->mbo_eadatasize);
__swab32s(&b->mbo_aclsize);
CLASSERT(offsetof(typeof(*b), mbo_unused3) != 0);
__swab32s(&b->mbo_uid_h);
__swab32s(&b->mbo_gid_h);
- CLASSERT(offsetof(typeof(*b), mbo_padding_5) != 0);
+ __swab32s(&b->mbo_projid);
+ __swab64s(&b->mbo_dom_size);
+ __swab64s(&b->mbo_dom_blocks);
+ CLASSERT(offsetof(typeof(*b), mbo_padding_8) != 0);
+ CLASSERT(offsetof(typeof(*b), mbo_padding_9) != 0);
+ CLASSERT(offsetof(typeof(*b), mbo_padding_10) != 0);
}
void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b)
void lustre_swab_mgs_target_info(struct mgs_target_info *mti)
{
- int i;
- __swab32s(&mti->mti_lustre_ver);
- __swab32s(&mti->mti_stripe_index);
- __swab32s(&mti->mti_config_ver);
- __swab32s(&mti->mti_flags);
- __swab32s(&mti->mti_instance);
- __swab32s(&mti->mti_nid_count);
- CLASSERT(sizeof(lnet_nid_t) == sizeof(__u64));
- for (i = 0; i < MTI_NIDS_MAX; i++)
- __swab64s(&mti->mti_nids[i]);
+ int i;
+
+ __swab32s(&mti->mti_lustre_ver);
+ __swab32s(&mti->mti_stripe_index);
+ __swab32s(&mti->mti_config_ver);
+ __swab32s(&mti->mti_flags);
+ __swab32s(&mti->mti_instance);
+ __swab32s(&mti->mti_nid_count);
+ CLASSERT(sizeof(lnet_nid_t) == sizeof(__u64));
+ for (i = 0; i < MTI_NIDS_MAX; i++)
+ __swab64s(&mti->mti_nids[i]);
}
void lustre_swab_mgs_nidtbl_entry(struct mgs_nidtbl_entry *entry)
{
__u8 i;
- __swab64s(&entry->mne_version);
- __swab32s(&entry->mne_instance);
- __swab32s(&entry->mne_index);
- __swab32s(&entry->mne_length);
-
- /* mne_nid_(count|type) must be one byte size because we're gonna
- * access it w/o swapping. */
- CLASSERT(sizeof(entry->mne_nid_count) == sizeof(__u8));
- CLASSERT(sizeof(entry->mne_nid_type) == sizeof(__u8));
-
- /* remove this assertion if ipv6 is supported. */
- LASSERT(entry->mne_nid_type == 0);
- for (i = 0; i < entry->mne_nid_count; i++) {
- CLASSERT(sizeof(lnet_nid_t) == sizeof(__u64));
- __swab64s(&entry->u.nids[i]);
- }
+ __swab64s(&entry->mne_version);
+ __swab32s(&entry->mne_instance);
+ __swab32s(&entry->mne_index);
+ __swab32s(&entry->mne_length);
+
+ /* mne_nid_(count|type) must be one byte size because we're gonna
+ * access it w/o swapping. */
+ CLASSERT(sizeof(entry->mne_nid_count) == sizeof(__u8));
+ CLASSERT(sizeof(entry->mne_nid_type) == sizeof(__u8));
+
+ /* remove this assertion if ipv6 is supported. */
+ LASSERT(entry->mne_nid_type == 0);
+ for (i = 0; i < entry->mne_nid_count; i++) {
+ CLASSERT(sizeof(lnet_nid_t) == sizeof(__u64));
+ __swab64s(&entry->u.nids[i]);
+ }
}
EXPORT_SYMBOL(lustre_swab_mgs_nidtbl_entry);
}
EXPORT_SYMBOL(lustre_swab_lmv_mds_md);
+void lustre_swab_lmv_user_md_objects(struct lmv_user_mds_data *lmd,
+ int stripe_count)
+{
+ int i;
+
+ for (i = 0; i < stripe_count; i++)
+ __swab32s(&(lmd[i].lum_mds));
+}
+EXPORT_SYMBOL(lustre_swab_lmv_user_md_objects);
+
+
void lustre_swab_lmv_user_md(struct lmv_user_md *lum)
{
+ __u32 count = lum->lum_stripe_count;
+
__swab32s(&lum->lum_magic);
__swab32s(&lum->lum_stripe_count);
__swab32s(&lum->lum_stripe_offset);
__swab32s(&lum->lum_hash_type);
__swab32s(&lum->lum_type);
CLASSERT(offsetof(typeof(*lum), lum_padding1) != 0);
+ switch (lum->lum_magic) {
+ case LMV_USER_MAGIC_SPECIFIC:
+ count = lum->lum_stripe_count;
+ case __swab32(LMV_USER_MAGIC_SPECIFIC):
+ lustre_swab_lmv_user_md_objects(lum->lum_objects, count);
+ break;
+ default:
+ break;
+ }
}
EXPORT_SYMBOL(lustre_swab_lmv_user_md);
-void lustre_print_user_md(unsigned int lvl, struct lov_user_md *lum,
- const char *msg)
+static void lustre_print_v1v3(unsigned int lvl, struct lov_user_md *lum,
+ const char *msg)
{
- if (likely(!cfs_cdebug_show(lvl, DEBUG_SUBSYSTEM)))
- return;
-
CDEBUG(lvl, "%s lov_user_md %p:\n", msg, lum);
CDEBUG(lvl, "\tlmm_magic: %#x\n", lum->lmm_magic);
CDEBUG(lvl, "\tlmm_pattern: %#x\n", lum->lmm_pattern);
CDEBUG(lvl, "\t\t%u\n", v3->lmm_objects[i].l_ost_idx);
}
}
+
+void lustre_print_user_md(unsigned int lvl, struct lov_user_md *lum,
+ const char *msg)
+{
+ struct lov_comp_md_v1 *comp_v1;
+ int i;
+
+ if (likely(!cfs_cdebug_show(lvl, DEBUG_SUBSYSTEM)))
+ return;
+
+ if (lum->lmm_magic == LOV_USER_MAGIC_V1 ||
+ lum->lmm_magic == LOV_USER_MAGIC_V3) {
+ lustre_print_v1v3(lvl, lum, msg);
+ return;
+ }
+
+ if (lum->lmm_magic != LOV_USER_MAGIC_COMP_V1) {
+ CDEBUG(lvl, "%s: bad magic: %x\n", msg, lum->lmm_magic);
+ return;
+ }
+
+ comp_v1 = (struct lov_comp_md_v1 *)lum;
+ CDEBUG(lvl, "%s: lov_comp_md_v1 %p:\n", msg, lum);
+ CDEBUG(lvl, "\tlcm_magic: %#x\n", comp_v1->lcm_magic);
+ CDEBUG(lvl, "\tlcm_size: %#x\n", comp_v1->lcm_size);
+ CDEBUG(lvl, "\tlcm_layout_gen: %#x\n", comp_v1->lcm_layout_gen);
+ CDEBUG(lvl, "\tlcm_flags: %#x\n", comp_v1->lcm_flags);
+ CDEBUG(lvl, "\tlcm_entry_count: %#x\n\n", comp_v1->lcm_entry_count);
+ CDEBUG(lvl, "\tlcm_mirror_count: %#x\n\n", comp_v1->lcm_mirror_count);
+
+ for (i = 0; i < comp_v1->lcm_entry_count; i++) {
+ struct lov_comp_md_entry_v1 *ent = &comp_v1->lcm_entries[i];
+ struct lov_user_md *v1;
+
+ CDEBUG(lvl, "\tentry %d:\n", i);
+ CDEBUG(lvl, "\tlcme_id: %#x\n", ent->lcme_id);
+ CDEBUG(lvl, "\tlcme_flags: %#x\n", ent->lcme_flags);
+ CDEBUG(lvl, "\tlcme_extent.e_start: %llu\n",
+ ent->lcme_extent.e_start);
+ CDEBUG(lvl, "\tlcme_extent.e_end: %llu\n",
+ ent->lcme_extent.e_end);
+ CDEBUG(lvl, "\tlcme_offset: %#x\n", ent->lcme_offset);
+ CDEBUG(lvl, "\tlcme_size: %#x\n\n", ent->lcme_size);
+
+ v1 = (struct lov_user_md *)((char *)comp_v1 +
+ comp_v1->lcm_entries[i].lcme_offset);
+ lustre_print_v1v3(lvl, v1, msg);
+ }
+}
EXPORT_SYMBOL(lustre_print_user_md);
static void lustre_swab_lmm_oi(struct ost_id *oi)
}
EXPORT_SYMBOL(lustre_swab_lov_user_md_v3);
+void lustre_swab_lov_comp_md_v1(struct lov_comp_md_v1 *lum)
+{
+ struct lov_comp_md_entry_v1 *ent;
+ struct lov_user_md_v1 *v1;
+ struct lov_user_md_v3 *v3;
+ int i;
+ bool cpu_endian;
+ __u32 off, size;
+ __u16 ent_count, stripe_count;
+ ENTRY;
+
+ cpu_endian = lum->lcm_magic == LOV_USER_MAGIC_COMP_V1;
+ ent_count = lum->lcm_entry_count;
+ if (!cpu_endian)
+ __swab16s(&ent_count);
+
+ CDEBUG(D_IOCTL, "swabbing lov_user_comp_md v1\n");
+ __swab32s(&lum->lcm_magic);
+ __swab32s(&lum->lcm_size);
+ __swab32s(&lum->lcm_layout_gen);
+ __swab16s(&lum->lcm_flags);
+ __swab16s(&lum->lcm_entry_count);
+ __swab16s(&lum->lcm_mirror_count);
+ CLASSERT(offsetof(typeof(*lum), lcm_padding1) != 0);
+ CLASSERT(offsetof(typeof(*lum), lcm_padding2) != 0);
+
+ for (i = 0; i < ent_count; i++) {
+ ent = &lum->lcm_entries[i];
+ off = ent->lcme_offset;
+ size = ent->lcme_size;
+
+ if (!cpu_endian) {
+ __swab32s(&off);
+ __swab32s(&size);
+ }
+ __swab32s(&ent->lcme_id);
+ __swab32s(&ent->lcme_flags);
+ __swab64s(&ent->lcme_extent.e_start);
+ __swab64s(&ent->lcme_extent.e_end);
+ __swab32s(&ent->lcme_offset);
+ __swab32s(&ent->lcme_size);
+ CLASSERT(offsetof(typeof(*ent), lcme_padding) != 0);
+
+ v1 = (struct lov_user_md_v1 *)((char *)lum + off);
+ stripe_count = v1->lmm_stripe_count;
+ if (!cpu_endian)
+ __swab16s(&stripe_count);
+
+ if (v1->lmm_magic == __swab32(LOV_USER_MAGIC_V1) ||
+ v1->lmm_magic == LOV_USER_MAGIC_V1) {
+ lustre_swab_lov_user_md_v1(v1);
+ if (size > sizeof(*v1))
+ lustre_swab_lov_user_md_objects(v1->lmm_objects,
+ stripe_count);
+ } else if (v1->lmm_magic == __swab32(LOV_USER_MAGIC_V3) ||
+ v1->lmm_magic == LOV_USER_MAGIC_V3 ||
+ v1->lmm_magic == __swab32(LOV_USER_MAGIC_SPECIFIC) ||
+ v1->lmm_magic == LOV_USER_MAGIC_SPECIFIC) {
+ v3 = (struct lov_user_md_v3 *)v1;
+ lustre_swab_lov_user_md_v3(v3);
+ if (size > sizeof(*v3))
+ lustre_swab_lov_user_md_objects(v3->lmm_objects,
+ stripe_count);
+ } else {
+ CERROR("Invalid magic %#x\n", v1->lmm_magic);
+ }
+ }
+}
+EXPORT_SYMBOL(lustre_swab_lov_comp_md_v1);
+
void lustre_swab_lov_mds_md(struct lov_mds_md *lmm)
{
ENTRY;
static inline int rep_ptlrpc_body_swabbed(struct ptlrpc_request *req)
{
- LASSERT(req->rq_repmsg);
+ if (unlikely(!req->rq_repmsg))
+ return 0;
- switch (req->rq_repmsg->lm_magic) {
- case LUSTRE_MSG_MAGIC_V2:
- return lustre_rep_swabbed(req, MSG_PTLRPC_BODY_OFF);
- default:
- /* uninitialized yet */
- return 0;
- }
+ switch (req->rq_repmsg->lm_magic) {
+ case LUSTRE_MSG_MAGIC_V2:
+ return lustre_rep_swabbed(req, MSG_PTLRPC_BODY_OFF);
+ default:
+ /* uninitialized yet */
+ return 0;
+ }
}
void _debug_req(struct ptlrpc_request *req,
- struct libcfs_debug_msg_data *msgdata,
- const char *fmt, ... )
+ struct libcfs_debug_msg_data *msgdata, const char *fmt, ...)
{
- int req_ok = req->rq_reqmsg != NULL;
- int rep_ok = req->rq_repmsg != NULL;
- lnet_nid_t nid = LNET_NID_ANY;
- va_list args;
+ bool req_ok = req->rq_reqmsg != NULL;
+ bool rep_ok = false;
+ lnet_nid_t nid = LNET_NID_ANY;
+ va_list args;
+ int rep_flags = -1;
+ int rep_status = -1;
- if (ptlrpc_req_need_swab(req)) {
- req_ok = req_ok && req_ptlrpc_body_swabbed(req);
- rep_ok = rep_ok && rep_ptlrpc_body_swabbed(req);
- }
+ spin_lock(&req->rq_early_free_lock);
+ if (req->rq_repmsg)
+ rep_ok = true;
+
+ if (ptlrpc_req_need_swab(req)) {
+ req_ok = req_ok && req_ptlrpc_body_swabbed(req);
+ rep_ok = rep_ok && rep_ptlrpc_body_swabbed(req);
+ }
- if (req->rq_import && req->rq_import->imp_connection)
- nid = req->rq_import->imp_connection->c_peer.nid;
- else if (req->rq_export && req->rq_export->exp_connection)
- nid = req->rq_export->exp_connection->c_peer.nid;
+ if (rep_ok) {
+ rep_flags = lustre_msg_get_flags(req->rq_repmsg);
+ rep_status = lustre_msg_get_status(req->rq_repmsg);
+ }
+ spin_unlock(&req->rq_early_free_lock);
+
+ if (req->rq_import && req->rq_import->imp_connection)
+ nid = req->rq_import->imp_connection->c_peer.nid;
+ else if (req->rq_export && req->rq_export->exp_connection)
+ nid = req->rq_export->exp_connection->c_peer.nid;
va_start(args, fmt);
libcfs_debug_vmsg2(msgdata, fmt, args,
- " req@%p x%llu/t%lld(%lld) o%d->%s@%s:%d/%d"
- " lens %d/%d e %d to %d dl "CFS_TIME_T" ref %d "
- "fl "REQ_FLAGS_FMT"/%x/%x rc %d/%d\n",
+ " req@%p x%llu/t%lld(%lld) o%d->%s@%s:%d/%d lens %d/%d e %d to %lld dl %lld ref %d fl " REQ_FLAGS_FMT "/%x/%x rc %d/%d\n",
req, req->rq_xid, req->rq_transno,
req_ok ? lustre_msg_get_transno(req->rq_reqmsg) : 0,
req_ok ? lustre_msg_get_opc(req->rq_reqmsg) : -1,
libcfs_nid2str(nid),
req->rq_request_portal, req->rq_reply_portal,
req->rq_reqlen, req->rq_replen,
- req->rq_early_count, req->rq_timedout,
- req->rq_deadline,
+ req->rq_early_count, (s64)req->rq_timedout,
+ (s64)req->rq_deadline,
atomic_read(&req->rq_refcount),
DEBUG_REQ_FLAGS(req),
req_ok ? lustre_msg_get_flags(req->rq_reqmsg) : -1,
- rep_ok ? lustre_msg_get_flags(req->rq_repmsg) : -1,
- req->rq_status,
- rep_ok ? lustre_msg_get_status(req->rq_repmsg) : -1);
+ rep_flags, req->rq_status, rep_status);
va_end(args);
}
EXPORT_SYMBOL(_debug_req);
lustre_swab_hsm_extent(&hui->hui_extent);
}
+void lustre_swab_lu_extent(struct lu_extent *le)
+{
+ __swab64s(&le->e_start);
+ __swab64s(&le->e_end);
+}
+
void lustre_swab_layout_intent(struct layout_intent *li)
{
__swab32s(&li->li_opc);
__swab32s(&li->li_flags);
- __swab64s(&li->li_start);
- __swab64s(&li->li_end);
+ lustre_swab_lu_extent(&li->li_extent);
}
void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk)
__swab64s(&cd->cd_data_version);
}
+void lustre_swab_close_data_resync_done(struct close_data_resync_done *resync)
+{
+ int i;
+
+ __swab32s(&resync->resync_count);
+ /* after swab, resync_count must in CPU endian */
+ if (resync->resync_count <= INLINE_RESYNC_ARRAY_SIZE) {
+ for (i = 0; i < resync->resync_count; i++)
+ __swab32s(&resync->resync_ids_inline[i]);
+ }
+}
+EXPORT_SYMBOL(lustre_swab_close_data_resync_done);
+
void lustre_swab_lfsck_request(struct lfsck_request *lr)
{
__swab32s(&lr->lr_event);
__swab32s(&lr->lr_flags);
lustre_swab_lu_fid(&lr->lr_fid);
lustre_swab_lu_fid(&lr->lr_fid2);
- lustre_swab_lu_fid(&lr->lr_fid3);
+ __swab32s(&lr->lr_comp_id);
+ CLASSERT(offsetof(typeof(*lr), lr_padding_0) != 0);
CLASSERT(offsetof(typeof(*lr), lr_padding_1) != 0);
CLASSERT(offsetof(typeof(*lr), lr_padding_2) != 0);
+ CLASSERT(offsetof(typeof(*lr), lr_padding_3) != 0);
}
void lustre_swab_lfsck_reply(struct lfsck_reply *lr)
__swab64s(&lr->lr_repaired);
}
+static void lustre_swab_orphan_rec(struct lu_orphan_rec *rec)
+{
+ lustre_swab_lu_fid(&rec->lor_fid);
+ __swab32s(&rec->lor_uid);
+ __swab32s(&rec->lor_gid);
+}
+
void lustre_swab_orphan_ent(struct lu_orphan_ent *ent)
{
lustre_swab_lu_fid(&ent->loe_key);
- lustre_swab_lu_fid(&ent->loe_rec.lor_fid);
- __swab32s(&ent->loe_rec.lor_uid);
- __swab32s(&ent->loe_rec.lor_gid);
+ lustre_swab_orphan_rec(&ent->loe_rec);
}
EXPORT_SYMBOL(lustre_swab_orphan_ent);
+void lustre_swab_orphan_ent_v2(struct lu_orphan_ent_v2 *ent)
+{
+ lustre_swab_lu_fid(&ent->loe_key);
+ lustre_swab_orphan_rec(&ent->loe_rec.lor_rec);
+ lustre_swab_ost_layout(&ent->loe_rec.lor_layout);
+ CLASSERT(offsetof(typeof(ent->loe_rec), lor_padding) != 0);
+}
+EXPORT_SYMBOL(lustre_swab_orphan_ent_v2);
+
void lustre_swab_ladvise(struct lu_ladvise *ladvise)
{
__swab16s(&ladvise->lla_advice);