#define IOC_OSC_TYPE 'h'
#define IOC_OSC_MIN_NR 20
#define IOC_OSC_SET_ACTIVE _IOWR(IOC_OSC_TYPE, 21, struct obd_device *)
+#define IOC_OSC_CTL_RECOVERY _IOWR(IOC_OSC_TYPE, 22, struct obd_device *)
#define IOC_OSC_MAX_NR 50
#define IOC_MDC_TYPE 'i'
struct list_head fo_llog_list;
spinlock_t fo_llog_list_lock;
+
+ /* which secure flavor from remote is denied */
+ spinlock_t fo_denylist_lock;
+ struct list_head fo_denylist;
+
};
struct mds_server_data;
struct obd_export *mds_dt_exp;
int mds_has_dt_desc;
struct lov_desc mds_dt_desc;
+
+ spinlock_t mds_dt_lock;
obd_id *mds_dt_objids;
- int mds_dt_objids_valid;
- int mds_dt_nextid_set;
struct file *mds_dt_objid_filp;
- spinlock_t mds_dt_lock;
+ int mds_dt_objids_valid;
+
unsigned long *mds_client_bitmap;
struct semaphore mds_orphan_recovery_sem;
/* security related */
char *mds_mds_sec;
char *mds_ost_sec;
+ /* which secure flavor from remote to this mds is denied */
+ spinlock_t mds_denylist_lock;
+ struct list_head mds_denylist;
+ struct semaphore mds_create_sem;
};
struct echo_obd {
struct cache_obd {
struct obd_export *master_exp; /* local connection to master obd */
struct obd_export *cache_exp; /* local connection to cache obd */
+ struct obd_export *cache_real_exp;
+ struct obd_export *master_real_exp;
struct obd_device *master;
struct obd_device *cache;
char *master_name;
int rc;
};
+#define OBD_MODE_ASYNC (1 << 0)
+#define OBD_MODE_CROW (1 << 1)
+
/* Don't conflict with on-wire flags OBD_BRW_WRITE, etc */
#define N_LOCAL_TEMP_PAGE 0x10000000
struct obd_trans_info {
__u64 oti_transno;
__u64 *oti_objid;
- /* Only used on the server side for tracking acks. */
+
+ /* only used on the server side for tracking acks. */
struct oti_req_ack_lock {
struct lustre_handle lock;
__u32 mode;
struct llog_cookie oti_onecookie;
struct llog_cookie *oti_logcookies;
int oti_numcookies;
+ int oti_flags;
};
static inline void oti_alloc_cookies(struct obd_trans_info *oti,int num_cookies)
spinlock_t obd_processing_task_lock;
__u64 obd_next_recovery_transno;
int obd_replayed_requests;
+ int obd_replayed_locks;
int obd_requests_queued_for_recovery;
wait_queue_head_t obd_next_transno_waitq;
struct list_head obd_uncommitted_replies;
spinlock_t obd_uncommitted_replies_lock;
struct timer_list obd_recovery_timer;
- struct list_head obd_recovery_queue;
- struct list_head obd_delayed_reply_queue;
time_t obd_recovery_start;
time_t obd_recovery_end;
+ atomic_t obd_req_replay_clients;
+ atomic_t obd_lock_replay_clients;
+
+ struct list_head obd_req_replay_queue;
+ struct list_head obd_lock_replay_queue;
+ struct list_head obd_final_req_queue;
+ int obd_recovery_stage;
+
union {
struct filter_obd filter;
struct mds_obd mds;
int (*o_connect)(struct lustre_handle *conn, struct obd_device *src,
struct obd_uuid *cluuid, struct obd_connect_data *data,
unsigned long flags);
- int (*o_connect_post)(struct obd_export *exp, unsigned long flags);
+ int (*o_connect_post)(struct obd_export *exp, unsigned, unsigned long);
int (*o_disconnect)(struct obd_export *exp, unsigned long flags);
int (*o_statfs)(struct obd_device *obd, struct obd_statfs *osfs,
int (*o_preallocate)(struct lustre_handle *, obd_count *req,
obd_id *ids);
int (*o_create)(struct obd_export *exp, struct obdo *oa,
+ void *acl, int acl_size,
struct lov_stripe_md **ea, struct obd_trans_info *oti);
int (*o_destroy)(struct obd_export *exp, struct obdo *oa,
struct lov_stripe_md *ea, struct obd_trans_info *oti);