/* target.c */
struct ptlrpc_request;
-struct recovd_data;
-struct recovd_obd;
struct obd_export;
+struct lu_target;
#include <lustre_ha.h>
#include <lustre_net.h>
#include <lvfs.h>
int target_handle_connect(struct ptlrpc_request *req);
int target_handle_disconnect(struct ptlrpc_request *req);
void target_destroy_export(struct obd_export *exp);
-int target_handle_reconnect(struct lustre_handle *conn, struct obd_export *exp,
- struct obd_uuid *cluuid, int);
int target_pack_pool_reply(struct ptlrpc_request *req);
int target_handle_ping(struct ptlrpc_request *req);
void target_committed_to_req(struct ptlrpc_request *req);
+int target_set_info_rpc(struct obd_import *imp, int opcode,
+ obd_count keylen, void *key,
+ obd_count vallen, void *val,
+ struct ptlrpc_request_set *set);
/* quotacheck callback, dqacq/dqrel callback handler */
int target_handle_qc_callback(struct ptlrpc_request *req);
#define OBD_RECOVERY_MAX_TIME (obd_timeout * 18) /* b13079 */
void target_cancel_recovery_timer(struct obd_device *obd);
-int target_start_recovery_thread(struct obd_device *obd,
- svc_handler_t handler);
void target_stop_recovery_thread(struct obd_device *obd);
void target_cleanup_recovery(struct obd_device *obd);
int target_queue_recovery_request(struct ptlrpc_request *req,
struct obd_client_handle {
struct lustre_handle och_fh;
struct lu_fid och_fid;
- struct md_open_data *och_mod;
+ struct md_open_data *och_mod;
__u32 och_magic;
int och_flags;
};
void l_unlock(struct lustre_lock *);
int l_has_lock(struct lustre_lock *);
-
/*
* OBD IOCTLS
*/
__u32 ioc_len;
__u32 ioc_version;
- __u64 ioc_cookie;
- __u32 ioc_conn1;
- __u32 ioc_conn2;
+ union {
+ __u64 ioc_cookie;
+ __u64 ioc_u64_1;
+ };
+ union {
+ __u32 ioc_conn1;
+ __u32 ioc_u32_1;
+ };
+ union {
+ __u32 ioc_conn2;
+ __u32 ioc_u32_2;
+ };
struct obdo ioc_obdo1;
struct obdo ioc_obdo2;
#define OBD_IOC_LOV_GET_CONFIG _IOWR('f', 132, OBD_IOC_DATA_TYPE)
#define OBD_IOC_CLIENT_RECOVER _IOW ('f', 133, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_PING_TARGET _IOW ('f', 136, OBD_IOC_DATA_TYPE)
#define OBD_IOC_DEC_FS_USE_COUNT _IO ('f', 139 )
#define OBD_IOC_NO_TRANSNO _IOW ('f', 140, OBD_IOC_DATA_TYPE)
#define OBD_IOC_GETDEVICE _IOWR ('f', 149, OBD_IOC_DATA_TYPE)
#define OBD_IOC_FID2PATH _IOWR ('f', 150, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_CHANGELOG_REG _IOW ('f', 151, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_CHANGELOG_DEREG _IOW ('f', 152, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_CHANGELOG_CLEAR _IOW ('f', 153, OBD_IOC_DATA_TYPE)
#define OBD_IOC_LOV_SETSTRIPE _IOW ('f', 154, OBD_IOC_DATA_TYPE)
#define OBD_IOC_LOV_GETSTRIPE _IOW ('f', 155, OBD_IOC_DATA_TYPE)
#define ECHO_IOC_ENQUEUE _IOWR('f', 202, OBD_IOC_DATA_TYPE)
#define ECHO_IOC_CANCEL _IOWR('f', 203, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_GET_OBJ_VERSION _IOR('f', 210, OBD_IOC_DATA_TYPE)
+
/* XXX _IOWR('f', 250, long) has been defined in
* libcfs/include/libcfs/libcfs_private.h for debug, don't use it
*/
struct l_wait_info {
cfs_duration_t lwi_timeout;
cfs_duration_t lwi_interval;
+ int lwi_allow_intr;
int (*lwi_on_timeout)(void *);
void (*lwi_on_signal)(void *);
void *lwi_cb_data;
.lwi_timeout = time, \
.lwi_on_timeout = cb, \
.lwi_cb_data = data, \
- .lwi_interval = 0 \
+ .lwi_interval = 0, \
+ .lwi_allow_intr = 0 \
})
#define LWI_TIMEOUT_INTERVAL(time, interval, cb, data) \
.lwi_timeout = time, \
.lwi_on_timeout = cb, \
.lwi_cb_data = data, \
- .lwi_interval = interval \
+ .lwi_interval = interval, \
+ .lwi_allow_intr = 0 \
})
#define LWI_TIMEOUT_INTR(time, time_cb, sig_cb, data) \
((struct l_wait_info) { \
.lwi_timeout = time, \
.lwi_on_timeout = time_cb, \
- .lwi_on_signal = sig_cb, \
+ .lwi_on_signal = sig_cb, \
.lwi_cb_data = data, \
- .lwi_interval = 0 \
+ .lwi_interval = 0, \
+ .lwi_allow_intr = 0 \
+})
+
+#define LWI_TIMEOUT_INTR_ALL(time, time_cb, sig_cb, data) \
+((struct l_wait_info) { \
+ .lwi_timeout = time, \
+ .lwi_on_timeout = time_cb, \
+ .lwi_on_signal = sig_cb, \
+ .lwi_cb_data = data, \
+ .lwi_interval = 0, \
+ .lwi_allow_intr = 1 \
})
#define LWI_INTR(cb, data) LWI_TIMEOUT_INTR(0, NULL, cb, data)
cfs_waitlink_t __wait; \
cfs_duration_t __timeout = info->lwi_timeout; \
cfs_sigset_t __blocked; \
+ int __allow_intr = info->lwi_allow_intr; \
\
ret = 0; \
if (condition) \
cfs_waitq_add(&wq, &__wait); \
\
/* Block all signals (just the non-fatal ones if no timeout). */ \
- if (info->lwi_on_signal != NULL && __timeout == 0) \
+ if (info->lwi_on_signal != NULL && (__timeout == 0 || __allow_intr)) \
__blocked = l_w_e_set_sigs(LUSTRE_FATAL_SIGS); \
else \
__blocked = l_w_e_set_sigs(0); \
if (condition) \
break; \
if (cfs_signal_pending()) { \
- if (info->lwi_on_signal != NULL && __timeout == 0) { \
+ if (info->lwi_on_signal != NULL && \
+ (__timeout == 0 || __allow_intr)) { \
if (info->lwi_on_signal != LWI_ON_SIGNAL_NOOP) \
info->lwi_on_signal(info->lwi_cb_data);\
ret = -EINTR; \