[pnfs] [PATCH 03/25] panlayout: panfs shim layer header definitions
Benny Halevy
bhalevy at panasas.com
Sun Jan 6 13:18:40 EST 2008
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
fs/nfs/panlayout/panfs_shim.h | 482 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 482 insertions(+), 0 deletions(-)
create mode 100644 fs/nfs/panlayout/panfs_shim.h
diff --git a/fs/nfs/panlayout/panfs_shim.h b/fs/nfs/panlayout/panfs_shim.h
new file mode 100644
index 0000000..a448705
--- /dev/null
+++ b/fs/nfs/panlayout/panfs_shim.h
@@ -0,0 +1,482 @@
+/*
+ * panfs_shim.h
+ *
+ * Data types and external function declerations for interfacing with
+ * panfs (Panasas DirectFlow) I/O stack
+ *
+ * Copyright (C) 2007 Panasas Inc.
+ * All rights reserved.
+ *
+ * Benny Halevy <bhalevy at panasas.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Panasas company nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * See the file COPYING included with this distribution for more details.
+ *
+ */
+
+#ifndef _PANLAYOUT_PANFS_SHIM_H
+#define _PANLAYOUT_PANFS_SHIM_H
+
+typedef s8 pan_int8_t;
+typedef u8 pan_uint8_t;
+typedef s16 pan_int16_t;
+typedef u16 pan_uint16_t;
+typedef s32 pan_int32_t;
+typedef u32 pan_uint32_t;
+typedef s64 pan_int64_t;
+typedef u64 pan_uint64_t;
+
+/*
+ * from pan_base_types.h
+ */
+typedef pan_uint64_t pan_rpc_none_t;
+typedef pan_uint32_t pan_rpc_arrdim_t;
+typedef pan_uint32_t pan_status_t;
+typedef pan_uint8_t pan_otw_t;
+typedef pan_uint8_t pan_pad_t;
+
+typedef pan_uint32_t pan_timespec_sec_t;
+typedef pan_uint32_t pan_timespec_nsec_t;
+
+typedef struct pan_timespec_s pan_timespec_t;
+struct pan_timespec_s {
+ pan_timespec_sec_t ts_sec;
+ pan_timespec_nsec_t ts_nsec;
+};
+
+/*
+ * from pan_std_types.h
+ */
+typedef pan_uint32_t pan_size_t;
+typedef int pan_bool_t;
+
+/*
+ * from pan_common_error.h
+ */
+#define PAN_SUCCESS ((pan_status_t)0)
+#define PAN_ERR_IN_PROGRESS ((pan_status_t)55)
+
+/*
+ * from pan_sg.h
+ */
+typedef struct pan_sg_entry_s pan_sg_entry_t;
+struct pan_sg_entry_s {
+ void *buffer; /* pointer to memory */
+ pan_uint32_t chunk_size; /* size of each chunk (bytes) */
+ pan_sg_entry_t *next;
+};
+
+/*
+ * from pan_storage.h
+ */
+typedef pan_uint64_t pan_stor_dev_id_t;
+typedef pan_uint32_t pan_stor_obj_grp_id_t;
+typedef pan_uint64_t pan_stor_obj_uniq_t;
+typedef pan_uint32_t pan_stor_action_t;
+typedef pan_uint8_t pan_stor_cap_key_t[20];
+
+typedef pan_uint8_t pan_stor_key_type_t;
+typedef pan_uint64_t pan_stor_len_t;
+typedef pan_int64_t pan_stor_delta_len_t;
+typedef pan_uint64_t pan_stor_offset_t;
+typedef pan_uint16_t pan_stor_op_t;
+
+typedef pan_uint16_t pan_stor_sec_level_t;
+
+struct pan_stor_obj_id_s {
+ pan_stor_dev_id_t dev_id;
+ pan_stor_obj_uniq_t obj_id;
+ pan_stor_obj_grp_id_t grp_id;
+};
+
+typedef struct pan_stor_obj_id_s pan_stor_obj_id_t;
+
+#define PAN_STOR_OP_NONE ((pan_stor_op_t) 0U)
+#define PAN_STOR_OP_READ ((pan_stor_op_t) 8U)
+#define PAN_STOR_OP_WRITE ((pan_stor_op_t) 9U)
+#define PAN_STOR_OP_APPEND ((pan_stor_op_t) 10U)
+#define PAN_STOR_OP_GETATTR ((pan_stor_op_t) 11U)
+#define PAN_STOR_OP_SETATTR ((pan_stor_op_t) 12U)
+#define PAN_STOR_OP_FLUSH ((pan_stor_op_t) 13U)
+#define PAN_STOR_OP_CLEAR ((pan_stor_op_t) 14U)
+
+/*
+ * from pan_aggregation_map.h
+ */
+typedef pan_uint8_t pan_agg_type_t;
+typedef pan_uint64_t pan_agg_map_version_t;
+typedef pan_uint8_t pan_agg_obj_state_t;
+typedef pan_uint8_t pan_agg_comp_state_t;
+typedef pan_uint8_t pan_agg_comp_flag_t;
+
+#define PAN_AGG_OBJ_STATE_INVALID ((pan_agg_obj_state_t) 0x00)
+#define PAN_AGG_OBJ_STATE_NORMAL ((pan_agg_obj_state_t) 0x01)
+#define PAN_AGG_OBJ_STATE_DEGRADED ((pan_agg_obj_state_t) 0x02)
+#define PAN_AGG_OBJ_STATE_RECONSTRUCT ((pan_agg_obj_state_t) 0x03)
+#define PAN_AGG_OBJ_STATE_COPYBACK ((pan_agg_obj_state_t) 0x04)
+#define PAN_AGG_OBJ_STATE_UNAVAILABLE ((pan_agg_obj_state_t) 0x05)
+#define PAN_AGG_OBJ_STATE_CREATING ((pan_agg_obj_state_t) 0x06)
+#define PAN_AGG_OBJ_STATE_DELETED ((pan_agg_obj_state_t) 0x07)
+#define PAN_AGG_COMP_STATE_INVALID ((pan_agg_comp_state_t) 0x00)
+#define PAN_AGG_COMP_STATE_NORMAL ((pan_agg_comp_state_t) 0x01)
+#define PAN_AGG_COMP_STATE_UNAVAILABLE ((pan_agg_comp_state_t) 0x02)
+#define PAN_AGG_COMP_STATE_COPYBACK ((pan_agg_comp_state_t) 0x03)
+#define PAN_AGG_COMP_F_NONE ((pan_agg_comp_flag_t) 0x00)
+#define PAN_AGG_COMP_F_ATTR_STORING ((pan_agg_comp_flag_t) 0x01)
+#define PAN_AGG_COMP_F_OBJ_CORRUPT_OBS ((pan_agg_comp_flag_t) 0x02)
+#define PAN_AGG_COMP_F_TEMP ((pan_agg_comp_flag_t) 0x04)
+
+struct pan_aggregation_map_s {
+ pan_agg_map_version_t version;
+ pan_agg_obj_state_t avail_state;
+ pan_stor_obj_id_t obj_id;
+};
+
+typedef struct pan_aggregation_map_s pan_aggregation_map_t;
+
+struct pan_agg_comp_obj_s {
+ pan_stor_dev_id_t dev_id;
+ pan_agg_comp_state_t avail_state;
+ pan_agg_comp_flag_t comp_flags;
+};
+
+typedef struct pan_agg_comp_obj_s pan_agg_comp_obj_t;
+
+struct pan_agg_simple_header_s {
+ pan_uint8_t unused;
+};
+
+typedef struct pan_agg_simple_header_s pan_agg_simple_header_t;
+
+struct pan_agg_raid1_header_s {
+ pan_uint16_t num_comps;
+};
+
+typedef struct pan_agg_raid1_header_s pan_agg_raid1_header_t;
+
+struct pan_agg_raid0_header_s {
+ pan_uint16_t num_comps;
+ pan_uint32_t stripe_unit;
+};
+
+typedef struct pan_agg_raid0_header_s pan_agg_raid0_header_t;
+
+struct pan_agg_raid5_left_header_s {
+ pan_uint16_t num_comps;
+ pan_uint32_t stripe_unit0;
+ pan_uint32_t stripe_unit1;
+ pan_uint32_t stripe_unit2;
+};
+
+typedef struct pan_agg_raid5_left_header_s pan_agg_raid5_left_header_t;
+
+typedef struct pan_agg_grp_raid5_left_header_s pan_agg_grp_raid5_left_header_t;
+
+struct pan_agg_grp_raid5_left_header_s {
+ pan_uint16_t num_comps;
+ pan_uint32_t stripe_unit;
+ pan_uint16_t rg_width;
+ pan_uint16_t rg_depth;
+ pan_uint8_t group_layout_policy;
+};
+
+#define PAN_AGG_GRP_RAID5_LEFT_POLICY_INVALID ((pan_uint8_t) 0x00)
+#define PAN_AGG_GRP_RAID5_LEFT_POLICY_ROUND_ROBIN ((pan_uint8_t) 0x01)
+
+#define PAN_AGG_NULL_MAP ((pan_agg_type_t) 0x00)
+#define PAN_AGG_SIMPLE ((pan_agg_type_t) 0x01)
+#define PAN_AGG_RAID1 ((pan_agg_type_t) 0x02)
+#define PAN_AGG_RAID0 ((pan_agg_type_t) 0x03)
+#define PAN_AGG_RAID5_LEFT ((pan_agg_type_t) 0x04)
+#define PAN_AGG_GRP_RAID5_LEFT ((pan_agg_type_t) 0x06)
+#define PAN_AGG_MINTYPE ((pan_agg_type_t) 0x01)
+#define PAN_AGG_MAXTYPE ((pan_agg_type_t) 0x06)
+
+struct pan_agg_layout_hdr_s {
+ pan_agg_type_t type;
+ pan_pad_t pad[3];
+ union {
+ pan_uint64_t null;
+ pan_agg_simple_header_t simple;
+ pan_agg_raid1_header_t raid1;
+ pan_agg_raid0_header_t raid0;
+ pan_agg_raid5_left_header_t raid5_left;
+ pan_agg_grp_raid5_left_header_t grp_raid5_left;
+ } hdr;
+};
+
+typedef struct pan_agg_layout_hdr_s pan_agg_layout_hdr_t;
+
+struct pan_agg_comp_obj_a_s {
+ pan_rpc_arrdim_t size;
+ pan_agg_comp_obj_t * data;
+};
+typedef struct pan_agg_comp_obj_a_s pan_agg_comp_obj_a;
+
+struct pan_agg_full_map_s {
+ pan_aggregation_map_t map_hdr;
+ pan_agg_layout_hdr_t layout_hdr;
+ pan_agg_comp_obj_a components;
+};
+
+typedef struct pan_agg_full_map_s pan_agg_full_map_t;
+
+/*
+ * from pan_obsd_rpc_types.h
+ */
+typedef pan_uint8_t pan_obsd_security_key_a[16];
+
+typedef pan_uint8_t pan_obsd_capability_key_a[20];
+
+typedef pan_uint8_t pan_obsd_key_holder_id_t;
+
+#define PAN_OBSD_KEY_HOLDER_BASIS_KEY ((pan_obsd_key_holder_id_t) 0x01)
+#define PAN_OBSD_KEY_HOLDER_CAP_KEY ((pan_obsd_key_holder_id_t) 0x02)
+
+struct pan_obsd_key_holder_s {
+ pan_obsd_key_holder_id_t select;
+ pan_pad_t pad[3];
+ union {
+ pan_obsd_security_key_a basis_key;
+ pan_obsd_capability_key_a cap_key;
+ } key;
+};
+
+typedef struct pan_obsd_key_holder_s pan_obsd_key_holder_t;
+
+/*
+ * from pan_sm_sec.h
+ */
+typedef pan_uint8_t pan_sm_sec_type_t;
+typedef pan_uint8_t pan_sm_sec_otw_allo_mode_t;
+
+struct pan_obsd_capability_generic_otw_t_s {
+ pan_rpc_arrdim_t size;
+ pan_uint8_t * data;
+};
+typedef struct pan_obsd_capability_generic_otw_t_s pan_obsd_capability_generic_otw_t;
+
+struct pan_sm_sec_obsd_s {
+ pan_obsd_key_holder_t key;
+ pan_obsd_capability_generic_otw_t cap_otw;
+ pan_sm_sec_otw_allo_mode_t allo_mode;
+};
+
+typedef struct pan_sm_sec_obsd_s pan_sm_sec_obsd_t;
+
+struct pan_sm_sec_s {
+ pan_sm_sec_type_t type;
+ pan_pad_t pad[3];
+ union {
+ pan_rpc_none_t none;
+ pan_sm_sec_obsd_t obsd;
+ } variant;
+};
+
+typedef struct pan_sm_sec_s pan_sm_sec_t;
+
+struct pan_sm_sec_a_s {
+ pan_rpc_arrdim_t size;
+ pan_sm_sec_t * data;
+};
+typedef struct pan_sm_sec_a_s pan_sm_sec_a;
+typedef pan_otw_t *pan_sm_sec_otw_t;
+
+/*
+ * from pan_sm_types.h
+ */
+typedef pan_uint64_t pan_sm_cap_handle_t;
+
+struct pan_sm_map_cap_s {
+ pan_agg_full_map_t full_map;
+ pan_stor_offset_t offset;
+ pan_stor_len_t length;
+ pan_sm_sec_a secs;
+ pan_sm_cap_handle_t handle;
+ pan_timespec_t expiration_time;
+ pan_stor_action_t action_mask;
+ pan_uint32_t flags;
+};
+
+typedef struct pan_sm_map_cap_s pan_sm_map_cap_t;
+
+/*
+ * from pan_sm_ops.h
+ */
+typedef pan_rpc_none_t pan_sm_cache_ptr_t;
+
+/*
+ * from pan_sam_api.h
+ */
+typedef pan_uint32_t pan_sam_access_flags_t;
+
+typedef struct pan_sam_dev_error_s pan_sam_dev_error_t;
+struct pan_sam_dev_error_s {
+ pan_stor_dev_id_t dev_id;
+ pan_stor_op_t stor_op;
+ pan_status_t error;
+};
+
+typedef struct pan_sam_ext_status_s pan_sam_ext_status_t;
+struct pan_sam_ext_status_s {
+ pan_uint32_t available;
+ pan_uint32_t size;
+ pan_sam_dev_error_t *errors;
+};
+
+enum pan_sam_rpc_sec_sel_e {
+ PAN_SAM_RPC_SEC_DEFAULT,
+ PAN_SAM_RPC_SEC_ATLEAST,
+ PAN_SAM_RPC_SEC_EXACTLY
+};
+typedef enum pan_sam_rpc_sec_sel_e pan_sam_rpc_sec_sel_t;
+
+typedef struct pan_sam_obj_sec_s pan_sam_obj_sec_t;
+struct pan_sam_obj_sec_s {
+ pan_stor_sec_level_t min_security;
+ pan_sm_map_cap_t *map_ccaps;
+};
+
+typedef struct pan_sam_rpc_sec_s pan_sam_rpc_sec_t;
+struct pan_sam_rpc_sec_s {
+ pan_sam_rpc_sec_sel_t selector;
+};
+
+typedef struct pan_sam_read_args_s pan_sam_read_args_t;
+struct pan_sam_read_args_s {
+ pan_stor_obj_id_t obj_id;
+ pan_sm_cache_ptr_t obj_ent;
+ void *return_attr;
+ void *checksum;
+ pan_stor_offset_t offset;
+ pan_uint16_t sm_options;
+ void *callout;
+ void *callout_arg;
+};
+
+typedef struct pan_sam_read_res_s pan_sam_read_res_t;
+struct pan_sam_read_res_s {
+ pan_status_t result;
+ pan_sam_ext_status_t ext_status;
+ pan_stor_len_t length;
+ void *attr;
+ void *checksum;
+};
+
+typedef void (*pan_sam_read_cb_t)(
+ void *user_arg1,
+ void *user_arg2,
+ pan_sam_read_res_t *res_p,
+ pan_status_t status);
+
+#define PAN_SAM_ACCESS_NONE 0x0000
+#define PAN_SAM_ACCESS_BYPASS_TIMESTAMP 0x0020
+
+typedef struct pan_sam_write_args_s pan_sam_write_args_t;
+struct pan_sam_write_args_s {
+ pan_stor_obj_id_t obj_id;
+ pan_sm_cache_ptr_t obj_ent;
+ pan_stor_offset_t offset;
+ void *attr;
+ void *return_attr;
+};
+
+typedef struct pan_sam_write_res_s pan_sam_write_res_t;
+struct pan_sam_write_res_s {
+ pan_status_t result;
+ pan_sam_ext_status_t ext_status;
+ pan_stor_len_t length;
+ pan_stor_delta_len_t delta_capacity_used;
+ pan_bool_t parity_dirty;
+ void *attr;
+};
+
+typedef void (*pan_sam_write_cb_t)(
+ void *user_arg1,
+ void *user_arg2,
+ pan_sam_write_res_t *res_p,
+ pan_status_t status);
+
+/*
+ * from pan_mgr_types.h
+ */
+#define PAN_MGR_ID_TYPE_SHIFT 56
+#define PAN_MGR_ID_TYPE_MASK ((pan_mgr_id_t)18374686479671623680ULL)
+#define PAN_MGR_ID_UNIQ_MASK ((pan_mgr_id_t)72057594037927935ULL)
+
+typedef pan_uint16_t pan_mgr_type_t;
+typedef pan_uint64_t pan_mgr_id_t;
+
+#define PAN_MGR_SM ((pan_mgr_type_t) 2U)
+#define PAN_MGR_OBSD ((pan_mgr_type_t) 6U)
+
+/*
+ * from pan_mgr_types_c.h
+ */
+#define pan_mgr_id_construct_artificial(_mgr_type_,_mgr_uniq_,_mgr_id_p_) { \
+ pan_mgr_id_t _id1, _id2; \
+\
+ _id1 = (_mgr_type_); \
+ _id1 <<= PAN_MGR_ID_TYPE_SHIFT; \
+ _id1 &= PAN_MGR_ID_TYPE_MASK; \
+ _id2 = (_mgr_uniq_); \
+ _id2 &= PAN_MGR_ID_UNIQ_MASK; \
+ _id1 |= _id2; \
+ *(_mgr_id_p_) = _id1; \
+}
+
+/*
+ * from pan_storage_c.h
+ */
+#define pan_stor_is_device_id_an_obsd_id(_device_id_) \
+ ((((_device_id_) & PAN_MGR_ID_TYPE_MASK) >> PAN_MGR_ID_TYPE_SHIFT) == PAN_MGR_OBSD)
+
+/*
+ * pnfs_shim internal definitions
+ */
+
+struct panfs_shim_io_state {
+ struct panlayout_io_state pl_state;
+
+ pan_sg_entry_t *sg_list;
+ struct page **pages;
+ unsigned nr_pages;
+ pan_sam_obj_sec_t obj_sec;
+ void *ucreds;
+ union {
+ struct {
+ pan_sam_read_args_t args;
+ pan_sam_read_res_t res;
+ } read;
+ struct {
+ pan_sam_write_args_t args;
+ pan_sam_write_res_t res;
+ } write;
+ } u;
+};
+
+#endif /* _PANLAYOUT_PANFS_SHIM_H */
--
1.5.3.3
More information about the pNFS
mailing list