#ifndef _LUSTRE_IDL_H_
#define _LUSTRE_IDL_H_
-#if !defined(LPU64)
#include <libcfs/libcfs.h> /* for LPUX64, etc */
-#endif
-
-/* Defn's shared with user-space. */
-#include <lustre/lustre_user.h>
-
+#include <lnet/types.h>
+#include <lustre/lustre_user.h> /* Defn's shared with user-space. */
#include <lustre/lustre_errno.h>
#include <lustre_ver.h>
#define LUSTRE_LOG_VERSION 0x00050000
#define LUSTRE_MGS_VERSION 0x00060000
-typedef __u32 mdsno_t;
-typedef __u64 seqno_t;
typedef __u64 obd_id;
typedef __u64 obd_seq;
typedef __s64 obd_time;
* been in production for years. This can handle create rates
* of 1M objects/s/OST for 9 years, or combinations thereof. */
if (oid >= IDIF_MAX_OID) {
- CERROR("bad MDT0 id, "DOSTID" ost_idx:%u\n",
- POSTID(ostid), ost_idx);
- return -EBADF;
+ CERROR("bad MDT0 id(1), "DOSTID" ost_idx:%u\n",
+ POSTID(ostid), ost_idx);
+ return -EBADF;
}
fid->f_seq = fid_idif_seq(oid, ost_idx);
/* truncate to 32 bits by assignment */
* OST objects into the FID namespace. In both cases, we just
* pass the FID through, no conversion needed. */
if (ostid->oi_fid.f_ver != 0) {
- CERROR("bad MDT0 id, "DOSTID" ost_idx:%u\n",
+ CERROR("bad MDT0 id(2), "DOSTID" ost_idx:%u\n",
POSTID(ostid), ost_idx);
return -EBADF;
}
static inline void ostid_cpu_to_le(const struct ost_id *src_oi,
struct ost_id *dst_oi)
{
- if (fid_seq_is_mdt0(ostid_seq(src_oi))) {
+ if (fid_seq_is_mdt0(src_oi->oi.oi_seq)) {
dst_oi->oi.oi_id = cpu_to_le64(src_oi->oi.oi_id);
dst_oi->oi.oi_seq = cpu_to_le64(src_oi->oi.oi_seq);
} else {
static inline void ostid_le_to_cpu(const struct ost_id *src_oi,
struct ost_id *dst_oi)
{
- if (fid_seq_is_mdt0(ostid_seq(src_oi))) {
+ if (fid_seq_is_mdt0(src_oi->oi.oi_seq)) {
dst_oi->oi.oi_id = le64_to_cpu(src_oi->oi.oi_id);
dst_oi->oi.oi_seq = le64_to_cpu(src_oi->oi.oi_seq);
} else {
#define XATTR_USER_PREFIX "user."
#define XATTR_TRUSTED_PREFIX "trusted."
#define XATTR_SECURITY_PREFIX "security."
-#define XATTR_LUSTRE_PREFIX "lustre."
#define XATTR_NAME_LOV "trusted.lov"
#define XATTR_NAME_LMA "trusted.lma"
#define XATTR_NAME_SOM "trusted.som"
#define XATTR_NAME_HSM "trusted.hsm"
#define XATTR_NAME_LFSCK_NAMESPACE "trusted.lfsck_namespace"
+#define XATTR_NAME_LFSCK_BITMAP "trusted.lfsck_bitmap"
#define XATTR_NAME_MAX_LEN 32 /* increase this, if there is longer name. */
struct lov_mds_md_v3 { /* LOV EA mds/wire data (little-endian) */
union {
__u32 lr_speed;
__u32 lr_status;
+ __u32 lr_type;
};
__u16 lr_version;
__u16 lr_active;
__u16 lr_param;
__u16 lr_async_windows;
- __u32 lr_padding_1;
+ __u32 lr_flags2;
struct lu_fid lr_fid;
struct lu_fid lr_fid2;
struct lu_fid lr_fid3;
LE_PEER_EXIT = 9,
LE_CONDITIONAL_DESTROY = 10,
LE_PAIRS_VERIFY = 11,
+ LE_CREATE_ORPHAN = 12,
};
enum lfsck_event_flags {
char oup_buf[0];
};
+static inline size_t
+object_update_param_size(const struct object_update_param *param)
+{
+ return cfs_size_round(sizeof(*param) + param->oup_len);
+}
+
/* object update */
struct object_update {
__u16 ou_type; /* enum update_type */
void lustre_swab_object_update(struct object_update *ou);
void lustre_swab_object_update_request(struct object_update_request *our);
+static inline size_t
+object_update_size(const struct object_update *update)
+{
+ const struct object_update_param *param;
+ size_t size;
+ unsigned int i;
+
+ size = offsetof(struct object_update, ou_params[0]);
+ for (i = 0; i < update->ou_params_count; i++) {
+ param = (struct object_update_param *)((char *)update + size);
+ size += object_update_param_size(param);
+ }
+
+ return size;
+}
+
+static inline struct object_update *
+object_update_request_get(const struct object_update_request *our,
+ unsigned int index, size_t *size)
+{
+ void *ptr;
+ unsigned int i;
+
+ if (index >= our->ourq_count)
+ return NULL;
+
+ ptr = (void *)&our->ourq_updates[0];
+ for (i = 0; i < index; i++)
+ ptr += object_update_size(ptr);
+
+ if (size != NULL)
+ *size = object_update_size(ptr);
+
+ return ptr;
+}
+
+
/* the result of object update */
struct object_update_result {
__u32 our_rc;
void lustre_swab_object_update_result(struct object_update_result *our);
void lustre_swab_object_update_reply(struct object_update_reply *our);
+static inline struct object_update_result *
+object_update_result_get(const struct object_update_reply *reply,
+ unsigned int index, size_t *size)
+{
+ __u16 count = reply->ourp_count;
+ unsigned int i;
+ void *ptr;
+
+ if (index >= count)
+ return NULL;
+
+ ptr = (char *)reply +
+ cfs_size_round(offsetof(struct object_update_reply,
+ ourp_lens[count]));
+ for (i = 0; i < index; i++) {
+ if (reply->ourp_lens[i] == 0)
+ return NULL;
+
+ ptr += cfs_size_round(reply->ourp_lens[i]);
+ }
+
+ if (size != NULL)
+ *size = reply->ourp_lens[index];
+
+ return ptr;
+}
+
/** layout swap request structure
* fid1 and fid2 are in mdt_body
*/