#include <linux/module.h>
#include <llog_swab.h>
-#include <lustre_debug.h>
#include <lustre_swab.h>
#include <obd.h>
#include <obd_support.h>
&RMF_MGS_TARGET_INFO
};
-#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 13, 53, 0)
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
static const struct req_msg_field *mgs_set_info[] = {
- &RMF_PTLRPC_BODY,
- &RMF_MGS_SEND_PARAM
+ &RMF_PTLRPC_BODY,
+ &RMF_MGS_SEND_PARAM
};
#endif
};
static const struct req_msg_field *quotactl_only[] = {
- &RMF_PTLRPC_BODY,
- &RMF_OBD_QUOTACTL
+ &RMF_PTLRPC_BODY,
+ &RMF_OBD_QUOTACTL
};
static const struct req_msg_field *quota_body_only[] = {
&RMF_DLM_REQ,
&RMF_FILE_SECCTX_NAME,
&RMF_FILE_SECCTX,
- &RMF_SELINUX_POL
+ &RMF_SELINUX_POL,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *mds_reint_create_sym_client[] = {
&RMF_DLM_REQ,
&RMF_FILE_SECCTX_NAME,
&RMF_FILE_SECCTX,
- &RMF_SELINUX_POL
+ &RMF_SELINUX_POL,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *mds_reint_open_client[] = {
&RMF_EADATA,
&RMF_FILE_SECCTX_NAME,
&RMF_FILE_SECCTX,
- &RMF_SELINUX_POL
+ &RMF_SELINUX_POL,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *mds_reint_open_server[] = {
&RMF_SETINFO_VAL
};
+static const struct req_msg_field *mdt_set_info_client[] = {
+ &RMF_PTLRPC_BODY,
+ &RMF_SETINFO_KEY,
+ &RMF_SETINFO_VAL,
+ &RMF_MDT_BODY
+};
+
static const struct req_msg_field *ost_grant_shrink_client[] = {
&RMF_PTLRPC_BODY,
&RMF_SETINFO_KEY,
&RMF_CAPA1,
&RMF_CAPA2,
&RMF_NIOBUF_INLINE,
- &RMF_FILE_SECCTX
+ &RMF_FILE_SECCTX,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *ldlm_intent_getattr_client[] = {
&RMF_ACL,
&RMF_CAPA1,
&RMF_FILE_SECCTX,
- &RMF_DEFAULT_MDT_MD
+ &RMF_DEFAULT_MDT_MD,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *ldlm_intent_create_client[] = {
&RMF_EADATA,
&RMF_FILE_SECCTX_NAME,
&RMF_FILE_SECCTX,
- &RMF_SELINUX_POL
+ &RMF_SELINUX_POL,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *ldlm_intent_open_client[] = {
&RMF_EADATA,
&RMF_FILE_SECCTX_NAME,
&RMF_FILE_SECCTX,
- &RMF_SELINUX_POL
+ &RMF_SELINUX_POL,
+ &RMF_FILE_ENCCTX,
};
static const struct req_msg_field *ldlm_intent_getxattr_client[] = {
&RMF_CAPA2
};
-static const struct req_msg_field *mds_update_client[] = {
- &RMF_PTLRPC_BODY,
- &RMF_OUT_UPDATE_HEADER,
- &RMF_OUT_UPDATE_BUF,
-};
-
-static const struct req_msg_field *mds_update_server[] = {
- &RMF_PTLRPC_BODY,
- &RMF_OUT_UPDATE_REPLY,
-};
-
static const struct req_msg_field *llog_origin_handle_create_client[] = {
- &RMF_PTLRPC_BODY,
- &RMF_LLOGD_BODY,
- &RMF_NAME
+ &RMF_PTLRPC_BODY,
+ &RMF_LLOGD_BODY,
+ &RMF_NAME,
+ &RMF_MDT_BODY
};
static const struct req_msg_field *llogd_body_only[] = {
static struct req_format *req_formats[] = {
&RQF_OBD_PING,
&RQF_OBD_SET_INFO,
+ &RQF_MDT_SET_INFO,
&RQF_OBD_IDX_READ,
&RQF_SEC_CTX,
&RQF_MGS_TARGET_REG,
-#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 13, 53, 0)
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
&RQF_MGS_SET_INFO,
#endif
&RQF_MGS_CONFIG_READ,
&RQF_MDS_HSM_REQUEST,
&RQF_MDS_SWAP_LAYOUTS,
&RQF_MDS_RMFID,
+#ifdef HAVE_SERVER_SUPPORT
&RQF_OUT_UPDATE,
+#endif
&RQF_OST_CONNECT,
&RQF_OST_DISCONNECT,
&RQF_OST_QUOTACTL,
&RQF_OST_SETATTR,
&RQF_OST_CREATE,
&RQF_OST_PUNCH,
+ &RQF_OST_FALLOCATE,
&RQF_OST_SYNC,
&RQF_OST_DESTROY,
&RQF_OST_BRW_READ,
&RQF_OST_SET_INFO_LAST_FID,
&RQF_OST_GET_INFO_FIEMAP,
&RQF_OST_LADVISE,
+ &RQF_OST_SEEK,
&RQF_LDLM_ENQUEUE,
&RQF_LDLM_ENQUEUE_LVB,
&RQF_LDLM_CONVERT,
};
enum rmf_flags {
- /**
- * The field is a string, must be NUL-terminated.
- */
- RMF_F_STRING = 1 << 0,
- /**
- * The field's buffer size need not match the declared \a rmf_size.
- */
- RMF_F_NO_SIZE_CHECK = 1 << 1,
- /**
- * The field's buffer size must be a whole multiple of the declared \a
- * rmf_size and the \a rmf_swabber function must work on the declared \a
- * rmf_size worth of bytes.
- */
- RMF_F_STRUCT_ARRAY = 1 << 2
+ /**
+ * The field is a string, must be NUL-terminated.
+ */
+ RMF_F_STRING = BIT(0),
+ /**
+ * The field's buffer size need not match the declared \a rmf_size.
+ */
+ RMF_F_NO_SIZE_CHECK = BIT(1),
+ /**
+ * The field's buffer size must be a whole multiple of the declared \a
+ * rmf_size and the \a rmf_swabber function must work on the declared \a
+ * rmf_size worth of bytes.
+ */
+ RMF_F_STRUCT_ARRAY = BIT(2),
};
struct req_capsule;
lustre_swab_mgs_target_info, NULL);
EXPORT_SYMBOL(RMF_MGS_TARGET_INFO);
-#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 13, 53, 0)
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
struct req_msg_field RMF_MGS_SEND_PARAM =
- DEFINE_MSGF("mgs_send_param", 0,
- sizeof(struct mgs_send_param),
- NULL, NULL);
+ DEFINE_MSGF("mgs_send_param", 0,
+ sizeof(struct mgs_send_param),
+ NULL, NULL);
EXPORT_SYMBOL(RMF_MGS_SEND_PARAM);
#endif
EXPORT_SYMBOL(RMF_MDT_BODY);
struct req_msg_field RMF_OBD_QUOTACTL =
- DEFINE_MSGF("obd_quotactl", 0,
- sizeof(struct obd_quotactl),
- lustre_swab_obd_quotactl, NULL);
+ DEFINE_MSGFL("obd_quotactl",
+ 0,
+ sizeof(struct obd_quotactl),
+ lustre_swab_obd_quotactl, NULL);
EXPORT_SYMBOL(RMF_OBD_QUOTACTL);
struct req_msg_field RMF_QUOTA_BODY =
DEFINE_MSGF("file_secctx", RMF_F_NO_SIZE_CHECK, -1, NULL, NULL);
EXPORT_SYMBOL(RMF_FILE_SECCTX);
+struct req_msg_field RMF_FILE_ENCCTX =
+ DEFINE_MSGF("file_encctx", RMF_F_NO_SIZE_CHECK, -1, NULL, NULL);
+EXPORT_SYMBOL(RMF_FILE_ENCCTX);
+
struct req_msg_field RMF_LLOGD_BODY =
DEFINE_MSGF("llogd_body", 0,
sizeof(struct llogd_body), lustre_swab_llogd_body, NULL);
lustre_swab_hsm_request, NULL);
EXPORT_SYMBOL(RMF_MDS_HSM_REQUEST);
-struct req_msg_field RMF_OUT_UPDATE = DEFINE_MSGF("object_update", 0, -1,
- lustre_swab_object_update_request, NULL);
-EXPORT_SYMBOL(RMF_OUT_UPDATE);
-
-struct req_msg_field RMF_OUT_UPDATE_REPLY =
- DEFINE_MSGF("object_update_reply", 0, -1,
- lustre_swab_object_update_reply, NULL);
-EXPORT_SYMBOL(RMF_OUT_UPDATE_REPLY);
-
struct req_msg_field RMF_SWAP_LAYOUTS =
DEFINE_MSGF("swap_layouts", 0, sizeof(struct mdc_swap_layouts),
lustre_swab_swap_layouts, NULL);
lustre_swab_ladvise, NULL);
EXPORT_SYMBOL(RMF_OST_LADVISE);
-struct req_msg_field RMF_OUT_UPDATE_HEADER = DEFINE_MSGF("out_update_header", 0,
- -1, lustre_swab_out_update_header, NULL);
-EXPORT_SYMBOL(RMF_OUT_UPDATE_HEADER);
-
-struct req_msg_field RMF_OUT_UPDATE_BUF = DEFINE_MSGF("update_buf",
- RMF_F_STRUCT_ARRAY, sizeof(struct out_update_buffer),
- lustre_swab_out_update_buffer, NULL);
-EXPORT_SYMBOL(RMF_OUT_UPDATE_BUF);
-
/*
* Request formats.
*/
DEFINE_REQ_FMT0("OBD_SET_INFO", obd_set_info_client, empty);
EXPORT_SYMBOL(RQF_OBD_SET_INFO);
+struct req_format RQF_MDT_SET_INFO =
+ DEFINE_REQ_FMT0("MDT_SET_INFO", mdt_set_info_client, empty);
+EXPORT_SYMBOL(RQF_MDT_SET_INFO);
+
/* Read index file through the network */
struct req_format RQF_OBD_IDX_READ =
DEFINE_REQ_FMT0("OBD_IDX_READ",
mgs_target_info_only);
EXPORT_SYMBOL(RQF_MGS_TARGET_REG);
-#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 13, 53, 0)
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
struct req_format RQF_MGS_SET_INFO =
- DEFINE_REQ_FMT0("MGS_SET_INFO", mgs_set_info,
- mgs_set_info);
+ DEFINE_REQ_FMT0("MGS_SET_INFO", mgs_set_info,
+ mgs_set_info);
EXPORT_SYMBOL(RQF_MGS_SET_INFO);
#endif
mds_getinfo_server);
EXPORT_SYMBOL(RQF_MDS_GET_INFO);
-struct req_format RQF_OUT_UPDATE =
- DEFINE_REQ_FMT0("OUT_UPDATE", mds_update_client,
- mds_update_server);
-EXPORT_SYMBOL(RQF_OUT_UPDATE);
-
struct req_format RQF_LDLM_ENQUEUE =
DEFINE_REQ_FMT0("LDLM_ENQUEUE",
ldlm_enqueue_client, ldlm_enqueue_lvb_server);
DEFINE_REQ_FMT0("OST_PUNCH", ost_body_capa, ost_body_only);
EXPORT_SYMBOL(RQF_OST_PUNCH);
+struct req_format RQF_OST_FALLOCATE =
+ DEFINE_REQ_FMT0("OST_FALLOCATE", ost_body_capa, ost_body_only);
+EXPORT_SYMBOL(RQF_OST_FALLOCATE);
+
+struct req_format RQF_OST_SEEK =
+ DEFINE_REQ_FMT0("OST_SEEK", ost_body_only, ost_body_only);
+EXPORT_SYMBOL(RQF_OST_SEEK);
+
struct req_format RQF_OST_SYNC =
DEFINE_REQ_FMT0("OST_SYNC", ost_body_capa, ost_body_only);
EXPORT_SYMBOL(RQF_OST_SYNC);
const struct req_msg_field *field,
enum req_location loc,
int offset,
- void *value, int len, int dump, void (*swabber)(void *))
+ void *value, int len, bool dump, void (*swabber)(void *))
{
- void *p;
- int i;
- int n;
- int size;
- int rc = 0;
- int do_swab;
- int inout = loc == RCL_CLIENT;
+ void *p;
+ int i;
+ int n;
+ int size;
+ int rc = 0;
+ bool do_swab;
+ bool inout = loc == RCL_CLIENT;
+ bool array = field->rmf_flags & RMF_F_STRUCT_ARRAY;
swabber = swabber ?: field->rmf_swabber;
if (ptlrpc_buf_need_swab(pill->rc_req, inout, offset) &&
(swabber != NULL || field->rmf_swab_len != NULL) && value != NULL)
- do_swab = 1;
+ do_swab = true;
else
- do_swab = 0;
+ do_swab = false;
if (!field->rmf_dumper)
- dump = 0;
-
- if (!(field->rmf_flags & RMF_F_STRUCT_ARRAY)) {
- if (dump) {
- CDEBUG(D_RPCTRACE, "Dump of %sfield %s follows\n",
- do_swab ? "unswabbed " : "", field->rmf_name);
- field->rmf_dumper(value);
- }
- if (!do_swab)
- return 0;
- if (!field->rmf_swab_len) {
- swabber(value);
- } else {
- size = field->rmf_swab_len(value, len);
- if (size < 0)
- rc = size;
- }
- ptlrpc_buf_set_swabbed(pill->rc_req, inout, offset);
- if (dump) {
- CDEBUG(D_RPCTRACE, "Dump of swabbed field %s "
- "follows\n", field->rmf_name);
- field->rmf_dumper(value);
- }
-
- return rc;
- }
+ dump = false;
/*
* We're swabbing an array; swabber() swabs a single array element, so
* swab every element.
*/
- if (len % field->rmf_size) {
+ if (array && (len % field->rmf_size)) {
static const struct req_msg_field *last_field;
if (field != last_field) {
last_field = field;
}
}
- for (p = value, i = 0, n = len / field->rmf_size;
- i < n;
- i++, p += field->rmf_size) {
- if (dump) {
- CDEBUG(D_RPCTRACE, "Dump of %sarray field %s, "
- "element %d follows\n",
- do_swab ? "unswabbed " : "", field->rmf_name, i);
- field->rmf_dumper(p);
- }
- if (!do_swab)
- continue;
+ /* For the non-array cases, the process of swab/dump/swab only
+ * needs to be done once. (n = 1)
+ */
+ if (!array)
+ len = field->rmf_size;
+ for (p = value, i = 0, n = len / field->rmf_size;
+ i < n;
+ i++, p += field->rmf_size) {
+ if (dump) {
+ CDEBUG(D_RPCTRACE, "Dump of %s%sfield %s element %d follows\n",
+ do_swab ? "unswabbed " : "",
+ array ? "array " : "",
+ field->rmf_name, i);
+ field->rmf_dumper(p);
+ }
+ if (!do_swab) {
+ if (array)
+ continue;
+ else
+ break;
+ }
if (!field->rmf_swab_len) {
swabber(p);
} else {
break;
}
}
- if (dump) {
- CDEBUG(D_RPCTRACE, "Dump of swabbed array field %s, "
- "element %d follows\n", field->rmf_name, i);
- field->rmf_dumper(value);
- }
+ if (dump) {
+ CDEBUG(D_RPCTRACE, "Dump of swabbed %sfield %s, element %d follows\n",
+ array ? "array " : "", field->rmf_name, i);
+ field->rmf_dumper(value);
+ }
}
if (do_swab)
ptlrpc_buf_set_swabbed(pill->rc_req, inout, offset);
* element of the array swabbed.
*/
static void *__req_capsule_get(struct req_capsule *pill,
- const struct req_msg_field *field,
- enum req_location loc,
- void (*swabber)( void *),
- int dump)
+ const struct req_msg_field *field,
+ enum req_location loc,
+ void (*swabber)(void *),
+ bool dump)
{
- const struct req_format *fmt;
- struct lustre_msg *msg;
- void *value;
+ const struct req_format *fmt;
+ struct lustre_msg *msg;
+ void *value;
__u32 len;
__u32 offset;
field->rmf_name, len);
} else {
/* It's dumping side-effect that we're interested in */
- (void) __req_capsule_get(pill, field, loc, NULL, 1);
+ (void) __req_capsule_get(pill, field, loc, NULL, true);
}
}
CDEBUG(D_RPCTRACE, "END REQ CAPSULE DUMP\n");
* buffer corresponding to the given RMF (\a field) of a \a pill.
*/
void *req_capsule_client_get(struct req_capsule *pill,
- const struct req_msg_field *field)
+ const struct req_msg_field *field)
{
- return __req_capsule_get(pill, field, RCL_CLIENT, NULL, 0);
+ return __req_capsule_get(pill, field, RCL_CLIENT, NULL, false);
}
EXPORT_SYMBOL(req_capsule_client_get);
const struct req_msg_field *field,
void *swabber)
{
- return __req_capsule_get(pill, field, RCL_CLIENT, swabber, 0);
+ return __req_capsule_get(pill, field, RCL_CLIENT, swabber, false);
}
EXPORT_SYMBOL(req_capsule_client_swab_get);
const struct req_msg_field *field,
__u32 len)
{
- req_capsule_set_size(pill, field, RCL_CLIENT, len);
- return __req_capsule_get(pill, field, RCL_CLIENT, NULL, 0);
+ req_capsule_set_size(pill, field, RCL_CLIENT, len);
+ return __req_capsule_get(pill, field, RCL_CLIENT, NULL, false);
}
EXPORT_SYMBOL(req_capsule_client_sized_get);
void *req_capsule_server_get(struct req_capsule *pill,
const struct req_msg_field *field)
{
- return __req_capsule_get(pill, field, RCL_SERVER, NULL, 0);
+ return __req_capsule_get(pill, field, RCL_SERVER, NULL, false);
}
EXPORT_SYMBOL(req_capsule_server_get);
* swabbing done outside this capsule abstraction.
*/
void *req_capsule_server_swab_get(struct req_capsule *pill,
- const struct req_msg_field *field,
- void *swabber)
+ const struct req_msg_field *field,
+ void *swabber)
{
- return __req_capsule_get(pill, field, RCL_SERVER, swabber, 0);
+ return __req_capsule_get(pill, field, RCL_SERVER, swabber, false);
}
EXPORT_SYMBOL(req_capsule_server_swab_get);
const struct req_msg_field *field,
__u32 len)
{
- req_capsule_set_size(pill, field, RCL_SERVER, len);
- return __req_capsule_get(pill, field, RCL_SERVER, NULL, 0);
+ req_capsule_set_size(pill, field, RCL_SERVER, len);
+ return __req_capsule_get(pill, field, RCL_SERVER, NULL, false);
}
EXPORT_SYMBOL(req_capsule_server_sized_get);
__u32 len, void *swabber)
{
req_capsule_set_size(pill, field, RCL_SERVER, len);
- return __req_capsule_get(pill, field, RCL_SERVER, swabber, 0);
+ return __req_capsule_get(pill, field, RCL_SERVER, swabber, false);
}
EXPORT_SYMBOL(req_capsule_server_sized_swab_get);
* client and server alike.
*/
const void *req_capsule_other_get(struct req_capsule *pill,
- const struct req_msg_field *field)
+ const struct req_msg_field *field)
{
- return __req_capsule_get(pill, field, pill->rc_loc ^ 1, NULL, 0);
+ return __req_capsule_get(pill, field, pill->rc_loc ^ 1, NULL, false);
}
EXPORT_SYMBOL(req_capsule_other_get);
/* Now we need only buffers, copy them and grow the needed one */
to = lustre_msg_buf(nrs->rs_msg, 0, 0);
from = lustre_msg_buf(rs->rs_msg, 0, 0);
- len = (char *)rs->rs_msg + lustre_packed_msg_size(rs->rs_msg) - from;
- memcpy(to, from, len);
+ memcpy(to, from,
+ (char *)rs->rs_msg + lustre_packed_msg_size(rs->rs_msg) - from);
+ lustre_msg_set_buflen(nrs->rs_msg, offset, len);
pill->rc_req->rq_replen = lustre_grow_msg(nrs->rs_msg, offset, newlen);
if (rs->rs_difficult) {
}
EXPORT_SYMBOL(req_capsule_server_grow);
+#ifdef HAVE_SERVER_SUPPORT
+static const struct req_msg_field *mds_update_client[] = {
+ &RMF_PTLRPC_BODY,
+ &RMF_OUT_UPDATE_HEADER,
+ &RMF_OUT_UPDATE_BUF,
+};
+
+static const struct req_msg_field *mds_update_server[] = {
+ &RMF_PTLRPC_BODY,
+ &RMF_OUT_UPDATE_REPLY,
+};
+
+struct req_msg_field RMF_OUT_UPDATE = DEFINE_MSGFL("object_update", 0, -1,
+ lustre_swab_object_update_request, NULL);
+EXPORT_SYMBOL(RMF_OUT_UPDATE);
+
+struct req_msg_field RMF_OUT_UPDATE_REPLY =
+ DEFINE_MSGFL("object_update_reply", 0, -1,
+ lustre_swab_object_update_reply, NULL);
+EXPORT_SYMBOL(RMF_OUT_UPDATE_REPLY);
+
+struct req_msg_field RMF_OUT_UPDATE_HEADER = DEFINE_MSGF("out_update_header", 0,
+ -1, lustre_swab_out_update_header, NULL);
+EXPORT_SYMBOL(RMF_OUT_UPDATE_HEADER);
+
+struct req_msg_field RMF_OUT_UPDATE_BUF = DEFINE_MSGF("update_buf",
+ RMF_F_STRUCT_ARRAY, sizeof(struct out_update_buffer),
+ lustre_swab_out_update_buffer, NULL);
+EXPORT_SYMBOL(RMF_OUT_UPDATE_BUF);
+
+struct req_format RQF_OUT_UPDATE =
+ DEFINE_REQ_FMT0("OUT_UPDATE", mds_update_client,
+ mds_update_server);
+EXPORT_SYMBOL(RQF_OUT_UPDATE);
+
int req_check_sepol(struct req_capsule *pill)
{
int rc = 0;
-#ifdef HAVE_SERVER_SUPPORT
struct obd_export *export;
struct lu_nodemap *nm = NULL;
const char *sepol = NULL;
if (!IS_ERR_OR_NULL(nm))
nodemap_putref(nm);
-#endif
return rc;
}
EXPORT_SYMBOL(req_check_sepol);
+#endif