* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <lustre_export.h>
#include <lustre_update.h>
#include <lustre_disk.h>
+#include <lustre_lfsck.h>
struct lu_target {
struct obd_device *lut_obd;
struct sptlrpc_rule_set lut_sptlrpc_rset;
spinlock_t lut_flags_lock;
int lut_sec_level;
- unsigned int lut_mds_capa:1,
- lut_oss_capa:1,
- lut_syncjournal:1,
+ unsigned int lut_syncjournal:1,
lut_sync_lock_cancel:2,
/* e.g. OST node */
lut_no_reconstruct:1;
* Additional fail id that can be set by handler.
*/
int tsi_reply_fail_id;
+ bool tsi_preprocessed;
/* request JobID */
char *tsi_jobid;
};
/* Request version for this opcode */
int th_version;
/* Handler function */
- int (*th_act)(struct tgt_session_info *tti);
+ int (*th_act)(struct tgt_session_info *tsi);
/* Handler function for high priority requests */
- int (*th_hp)(struct tgt_session_info *tti);
+ void (*th_hp)(struct tgt_session_info *tsi);
/* Request format for this request */
const struct req_format *th_fmt;
};
int tgt_sendpage(struct tgt_session_info *tsi, struct lu_rdpg *rdpg, int nob);
int tgt_validate_obdo(struct tgt_session_info *tsi, struct obdo *oa);
int tgt_sync(const struct lu_env *env, struct lu_target *tgt,
- struct dt_object *obj);
+ struct dt_object *obj, __u64 start, __u64 end);
int tgt_io_thread_init(struct ptlrpc_thread *thread);
void tgt_io_thread_done(struct ptlrpc_thread *thread);
int tgt_brw_read(struct tgt_session_info *tsi);
int tgt_brw_write(struct tgt_session_info *tsi);
int tgt_hpreq_handler(struct ptlrpc_request *req);
+void tgt_register_lfsck_in_notify(int (*notify)(const struct lu_env *,
+ struct dt_device *,
+ struct lfsck_request *,
+ struct thandle *));
+void tgt_register_lfsck_query(int (*query)(const struct lu_env *,
+ struct dt_device *,
+ struct lfsck_request *));
extern struct tgt_handler tgt_sec_ctx_handlers[];
+extern struct tgt_handler tgt_lfsck_handlers[];
extern struct tgt_handler tgt_obd_handlers[];
extern struct tgt_handler tgt_dlm_handlers[];
extern struct tgt_handler tgt_llog_handlers[];
void *tgt_cb_data;
};
+int tgt_hpreq_handler(struct ptlrpc_request *req);
+
/* target/tgt_main.c */
void tgt_boot_epoch_update(struct lu_target *lut);
int tgt_last_commit_cb_add(struct thandle *th, struct lu_target *lut,
/*
* Unified target generic handers macros and generic functions.
*/
-#define TGT_RPC_HANDLER(base, flags, opc, fn, fmt, version) \
+#define TGT_RPC_HANDLER_HP(base, flags, opc, fn, hp, fmt, version) \
[opc - base] = { \
.th_name = #opc, \
.th_fail_id = OBD_FAIL_ ## opc ## _NET, \
.th_flags = flags, \
.th_act = fn, \
.th_fmt = fmt, \
- .th_version = version \
+ .th_version = version, \
+ .th_hp = hp, \
}
+#define TGT_RPC_HANDLER(base, flags, opc, fn, fmt, version) \
+ TGT_RPC_HANDLER_HP(base, flags, opc, fn, NULL, fmt, version)
/* MDT Request with a format known in advance */
#define TGT_MDT_HDL(flags, name, fn) \
TGT_RPC_HANDLER(MDS_FIRST_OPC, flags, name, fn, NULL, \
LUSTRE_MDS_VERSION)
-/* MDT Request with a format known in advance */
+/* OST Request with a format known in advance */
#define TGT_OST_HDL(flags, name, fn) \
TGT_RPC_HANDLER(OST_FIRST_OPC, flags, name, fn, &RQF_ ## name, \
LUSTRE_OST_VERSION)
+#define TGT_OST_HDL_HP(flags, name, fn, hp) \
+ TGT_RPC_HANDLER_HP(OST_FIRST_OPC, flags, name, fn, hp, \
+ &RQF_ ## name, LUSTRE_OST_VERSION)
/* MGS request with a format known in advance */
#define TGT_MGS_HDL(flags, name, fn) \
LUSTRE_MDS_VERSION)
/* FID Location Database handlers */
-#define TGT_FLD_HDL(flags, name, fn) \
- TGT_RPC_HANDLER(FLD_QUERY, flags, name, fn, &RQF_ ## name, \
+#define TGT_FLD_HDL_VAR(flags, name, fn) \
+ TGT_RPC_HANDLER(FLD_QUERY, flags, name, fn, NULL, \
LUSTRE_MDS_VERSION)
+/* LFSCK handlers */
+#define TGT_LFSCK_HDL(flags, name, fn) \
+ TGT_RPC_HANDLER(LFSCK_FIRST_OPC, flags, name, fn, \
+ &RQF_ ## name, LUSTRE_OBD_VERSION)
+
/* Request with a format known in advance */
#define TGT_UPDATE_HDL(flags, name, fn) \
- TGT_RPC_HANDLER(UPDATE_OBJ, flags, name, fn, &RQF_ ## name, \
+ TGT_RPC_HANDLER(OUT_UPDATE, flags, name, fn, &RQF_ ## name, \
LUSTRE_MDS_VERSION)
#endif /* __LUSTRE_LU_TARGET_H */