#include <lustre_quota.h>
#include <lustre_fld.h>
#include <lustre_capa.h>
+#include <class_hash.h>
+
+#include <libcfs/bitmap.h>
+
#define MAX_OBD_DEVICES 8192
struct list_head loi_write_item;
struct list_head loi_read_item;
- unsigned loi_kms_valid:1;
+ unsigned long loi_kms_valid:1;
__u64 loi_kms; /* known minimum size */
struct ost_lvb loi_lvb;
struct osc_async_rc loi_ar;
* callees of this method are encouraged to abort their state
* in the oig. This may be called multiple times. */
void (*occ_interrupted)(struct oig_callback_context *occ);
- unsigned int interrupted:1;
+ unsigned long interrupted:1;
};
/* Individual type definitions */
int fo_fmd_max_num; /* per exp filter_mod_data */
int fo_fmd_max_age; /* jiffies to fmd expiry */
+ /* sptlrpc stuff */
+ rwlock_t fo_sptlrpc_lock;
+ struct sptlrpc_rule_set fo_sptlrpc_rset;
+
/* capability related */
unsigned int fo_fl_oss_capa;
struct list_head fo_capa_keys;
#define OSC_MAX_RIF_MAX 256
#define OSC_MAX_DIRTY_DEFAULT (OSC_MAX_RIF_DEFAULT * 4)
#define OSC_MAX_DIRTY_MB_MAX 2048 /* arbitrary, but < MAX_LONG bytes */
+#define OSC_DEFAULT_RESENDS 10
#define MDC_MAX_RIF_DEFAULT 8
#define MDC_MAX_RIF_MAX 512
int cl_max_mds_cookiesize;
/* security configuration */
- struct sec_flavor_config cl_sec_conf;
+ struct sptlrpc_rule_set cl_sptlrpc_rset;
+ enum lustre_sec_part cl_sec_part;
//struct llog_canceld_ctxt *cl_llcd; /* it's included by obd_llog_ctxt */
void *cl_llcd_offset;
struct obd_histogram cl_read_offset_hist;
struct obd_histogram cl_write_offset_hist;
+ /* number of in flight destroy rpcs is limited to max_rpcs_in_flight */
+ atomic_t cl_destroy_in_flight;
+ cfs_waitq_t cl_destroy_waitq;
+
struct mdc_rpc_lock *cl_rpc_lock;
struct mdc_rpc_lock *cl_setattr_lock;
struct mdc_rpc_lock *cl_close_lock;
struct obd_export *cl_mgc_mgsexp;
/* Flags section */
- unsigned int cl_checksum:1; /* debug checksums */
+ unsigned long cl_checksum:1; /* debug checksums */
/* also protected by the poorly named _loi_list_lock lock above */
struct osc_async_rc cl_ar;
/* sequence manager */
struct lu_client_seq *cl_seq;
+
+ atomic_t cl_resends; /* resend count */
};
#define obd2cli_tgt(obd) ((char *)(obd)->u.cli.cl_target_uuid.uuid)
cfs_proc_dir_entry_t *mgs_proc_live;
};
-/* hah, upper limit 64 should be enough */
-#define N_NOSQUASH_NIDS 64
-struct rootsquash_info {
- uid_t rsi_uid;
- gid_t rsi_gid;
- int rsi_n_nosquash_nids;
- lnet_nid_t rsi_nosquash_nids[N_NOSQUASH_NIDS];
-};
-
struct mds_obd {
/* NB this field MUST be first */
struct obd_device_target mds_obt;
struct obd_export *mds_osc_exp; /* XXX lov_exp */
struct lov_desc mds_lov_desc;
__u32 mds_id;
- obd_id *mds_lov_objids;
- int mds_lov_objids_size;
- __u32 mds_lov_objids_in_file;
- unsigned int mds_lov_objids_dirty:1;
- int mds_lov_nextid_set;
+
+ /* mark pages dirty for write. */
+ bitmap_t *mds_lov_page_dirty;
+ /* array for store pages with obd_id */
+ void **mds_lov_page_array;
+ /* file for store objid */
struct file *mds_lov_objid_filp;
+ __u32 mds_lov_objid_count;
+ __u32 mds_lov_objid_lastpage;
+ __u32 mds_lov_objid_lastidx;
+
struct file *mds_health_check_filp;
unsigned long *mds_client_bitmap;
// struct upcall_cache *mds_group_hash;
struct lustre_quota_info mds_quota_info;
struct semaphore mds_qonoff_sem;
struct semaphore mds_health_sem;
- unsigned long mds_lov_objids_valid:1,
- mds_fl_user_xattr:1,
+ unsigned long mds_fl_user_xattr:1,
mds_fl_acl:1,
- mds_evict_ost_nids:1;
-
+ mds_evict_ost_nids:1,
+ mds_fl_cfglog:1,
+ mds_fl_synced:1;
struct upcall_cache *mds_identity_cache;
- struct upcall_cache *mds_rmtacl_cache;
-
- /* root squash */
- struct rootsquash_info *mds_rootsquash_info;
/* for capability keys update */
struct lustre_capa_key *mds_capa_keys;
};
+/* lov objid */
+extern __u32 mds_max_ost_index;
+
+#define MDS_LOV_ALLOC_SIZE (CFS_PAGE_SIZE)
+
+#define OBJID_PER_PAGE() (MDS_LOV_ALLOC_SIZE / sizeof(obd_id))
+
+#define MDS_LOV_OBJID_PAGES_COUNT (mds_max_ost_index/OBJID_PER_PAGE())
+
+extern int mds_lov_init_objids(struct obd_device *obd);
+extern void mds_lov_destroy_objids(struct obd_device *obd);
+
+struct obd_id_info {
+ __u32 idx;
+ obd_id *data;
+};
+
+/* */
+
struct echo_obd {
struct obdo eo_oa;
spinlock_t eo_lock;
__u32 *lq_rr_array; /* round-robin optimized list */
unsigned int lq_rr_size; /* rr array size */
unsigned int lq_prio_free; /* priority for free space */
- unsigned int lq_dirty:1, /* recalc qos data */
+ unsigned long lq_dirty:1, /* recalc qos data */
lq_dirty_rr:1, /* recalc round-robin list */
lq_same_space:1,/* the ost's all have approx.
the same space avail */
struct ltd_qos ltd_qos; /* qos info per target */
__u32 ltd_gen;
__u32 ltd_index; /* index in lov_obd->tgts */
- unsigned int ltd_active:1,/* is this target up for requests */
+ unsigned long ltd_active:1,/* is this target up for requests */
ltd_activate:1,/* should this target be activated */
ltd_reap:1; /* should this target be deleted */
};
struct obd_trans_info {
__u64 oti_transno;
__u64 oti_xid;
- __u64 *oti_objid;
/* Only used on the server side for tracking acks. */
struct oti_req_ack_lock {
struct lustre_handle lock;
OBD_NOTIFY_CONFIG
};
+/* bit-mask flags for config events */
+enum config_flags {
+ CONFIG_LOG = 0x1, /* finished processing config log */
+ CONFIG_SYNC = 0x2 /* mdt synced 1 ost */
+};
+
/*
* Data structure used to pass obd_notify()-event to non-obd listeners (llite
* and liblustre being main examples).
struct lu_device *obd_lu_dev;
int obd_minor;
- unsigned int obd_attached:1, /* finished attach */
- obd_set_up:1, /* finished setup */
- obd_recovering:1, /* there are recoverable clients */
- obd_abort_recovery:1,/* somebody ioctl'ed us to abort */
- obd_replayable:1, /* recovery is enabled; inform clients */
- obd_no_transno:1, /* no committed-transno notification */
- obd_no_recov:1, /* fail instead of retry messages */
- obd_req_replaying:1, /* replaying requests */
- obd_stopping:1, /* started cleanup */
- obd_starting:1, /* started setup */
- obd_force:1, /* cleanup with > 0 obd refcount */
- obd_fail:1, /* cleanup with failover */
- obd_async_recov:1, /* allow asyncronous orphan cleanup */
- obd_no_conn:1; /* deny new connections */
+ unsigned long obd_attached:1, /* finished attach */
+ obd_set_up:1, /* finished setup */
+ obd_recovering:1, /* there are recoverable clients */
+ obd_abort_recovery:1,/* somebody ioctl'ed us to abort */
+ obd_replayable:1, /* recovery is enabled; inform clients */
+ obd_no_transno:1, /* no committed-transno notification */
+ obd_no_recov:1, /* fail instead of retry messages */
+ obd_req_replaying:1, /* replaying requests */
+ obd_stopping:1, /* started cleanup */
+ obd_starting:1, /* started setup */
+ obd_force:1, /* cleanup with > 0 obd refcount */
+ obd_fail:1, /* cleanup with failover */
+ obd_async_recov:1, /* allow asyncronous orphan cleanup */
+ obd_no_conn:1, /* deny new connections */
+ obd_inactive:1; /* device active/inactive
+ * (for /proc/status only!!) */
+ /* uuid-export hash body */
+ struct lustre_class_hash_body *obd_uuid_hash_body;
+ /* nid-export hash body */
+ struct lustre_class_hash_body *obd_nid_hash_body;
atomic_t obd_refcount;
cfs_waitq_t obd_refcount_waitq;
struct list_head obd_exports;
struct list_head obd_uncommitted_replies;
spinlock_t obd_uncommitted_replies_lock;
cfs_timer_t obd_recovery_timer;
- time_t obd_recovery_start;
- time_t obd_recovery_end;
+ time_t obd_recovery_start; /* seconds */
+ time_t obd_recovery_end; /* seconds */
+ time_t obd_recovery_max_time; /* seconds, bz13079 */
/* new recovery stuff from CMD2 */
struct target_recovery_data obd_recovery_data;
#define KEY_CONN_DATA "conn_data"
#define KEY_MAX_EASIZE "max_easize"
#define KEY_REVIMP_UPD "revimp_update"
+#define KEY_LOV_IDX "lov_idx"
+#define KEY_LAST_ID "last_id"
+#define KEY_LOCK_TO_STRIPE "lock_to_stripe"
+#define KEY_BLOCKSIZE "blocksize"
+#define KEY_BLOCKSIZE_BITS "blocksize_bits"
struct lu_context;
int (*o_connect)(const struct lu_env *env,
struct lustre_handle *conn, struct obd_device *src,
struct obd_uuid *cluuid, struct obd_connect_data *ocd);
- int (*o_reconnect)(struct obd_export *exp, struct obd_device *src,
+ int (*o_reconnect)(const struct lu_env *env,
+ struct obd_export *exp, struct obd_device *src,
struct obd_uuid *cluuid,
struct obd_connect_data *ocd);
int (*o_disconnect)(struct obd_export *exp);
int (*o_preallocate)(struct lustre_handle *, obd_count *req,
obd_id *ids);
/* FIXME: add fid capability support for create & destroy! */
- int (*o_precreate)(struct obd_export *exp, int need_create);
+ int (*o_precreate)(struct obd_export *exp);
int (*o_create)(struct obd_export *exp, struct obdo *oa,
struct lov_stripe_md **ea, struct obd_trans_info *oti);
int (*o_destroy)(struct obd_export *exp, struct obdo *oa,
struct list_head mod_replay_list;
};
+struct lookup_intent;
+
struct md_ops {
int (*m_getstatus)(struct obd_export *, struct lu_fid *,
struct obd_capa **);
struct ptlrpc_request **);
int (*m_getattr_name)(struct obd_export *, const struct lu_fid *,
struct obd_capa *, const char *, int, obd_valid,
- int, struct ptlrpc_request **);
+ int, __u32, struct ptlrpc_request **);
int (*m_intent_lock)(struct obd_export *, struct md_op_data *,
void *, int, struct lookup_intent *, int,
struct ptlrpc_request **,
int (*m_setxattr)(struct obd_export *, const struct lu_fid *,
struct obd_capa *, obd_valid, const char *,
- const char *, int, int, int,
+ const char *, int, int, int, __u32,
struct ptlrpc_request **);
int (*m_getxattr)(struct obd_export *, const struct lu_fid *,
int (*m_init_ea_size)(struct obd_export *, int, int, int);
int (*m_get_lustre_md)(struct obd_export *, struct ptlrpc_request *,
- int, struct obd_export *, struct obd_export *,
+ struct obd_export *, struct obd_export *,
struct lustre_md *);
int (*m_free_lustre_md)(struct obd_export *, struct lustre_md *);
struct obd_client_handle *);
int (*m_set_lock_data)(struct obd_export *, __u64 *, void *);
- int (*m_lock_match)(struct obd_export *, int, const struct lu_fid *,
- ldlm_type_t, ldlm_policy_data_t *, ldlm_mode_t,
- struct lustre_handle *);
+ ldlm_mode_t (*m_lock_match)(struct obd_export *, int,
+ const struct lu_fid *, ldlm_type_t,
+ ldlm_policy_data_t *, ldlm_mode_t,
+ struct lustre_handle *);
int (*m_cancel_unused)(struct obd_export *, const struct lu_fid *,
ldlm_policy_data_t *, ldlm_mode_t, int flags,
renew_capa_cb_t cb);
int (*m_get_remote_perm)(struct obd_export *, const struct lu_fid *,
- struct obd_capa *, struct ptlrpc_request **);
+ struct obd_capa *, __u32,
+ struct ptlrpc_request **);
/*
* NOTE: If adding ops, add another LPROCFS_MD_OP_INIT() line to