void ptlrpc_commit_replies(struct obd_export *exp);
void ptlrpc_dispatch_difficult_reply(struct ptlrpc_reply_state *rs);
void ptlrpc_schedule_difficult_reply(struct ptlrpc_reply_state *rs);
+int ptlrpc_hpreq_handler(struct ptlrpc_request *req);
struct ptlrpc_service *ptlrpc_register_service(
struct ptlrpc_service_conf *conf,
struct proc_dir_entry *proc_entry);
static struct ptlrpc_hpreq_ops ldlm_cancel_hpreq_ops = {
.hpreq_lock_match = ldlm_cancel_hpreq_lock_match,
- .hpreq_check = ldlm_cancel_hpreq_check
+ .hpreq_check = ldlm_cancel_hpreq_check,
+ .hpreq_fini = NULL,
};
static int ldlm_hpreq_handler(struct ptlrpc_request *req)
.psc_ops = {
.so_req_handler = mdt_regular_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = ptlrpc_hpreq_handler,
},
};
m->mdt_regular_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_readpage_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
m->mdt_readpage_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_regular_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
m->mdt_setattr_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_mdsc_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
m->mdt_mdsc_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_mdss_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
m->mdt_mdss_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_dtss_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
m->mdt_dtss_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_fld_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
m->mdt_fld_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = mdt_xmds_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = ptlrpc_hpreq_handler,
},
};
m->mdt_xmds_service = ptlrpc_register_service(&conf, procfs_entry);
.psc_ops = {
.so_req_handler = ost_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = ptlrpc_hpreq_handler,
},
};
ost->ost_service = ptlrpc_register_service(&svc_conf,
.psc_ops = {
.so_req_handler = ost_handle,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
ost->ost_create_service = ptlrpc_register_service(&svc_conf,
.so_req_handler = ost_handle,
.so_hpreq_handler = ost_hpreq_handler,
.so_req_printer = target_print_req,
+ .so_hpreq_handler = NULL,
},
};
ost->ost_io_service = ptlrpc_register_service(&svc_conf,
req->rq_phase = RQ_PHASE_NEW;
cfs_spin_lock_init(&req->rq_lock);
CFS_INIT_LIST_HEAD(&req->rq_timed_list);
+ CFS_INIT_LIST_HEAD(&req->rq_exp_list);
cfs_atomic_set(&req->rq_refcount, 1);
if (ev->type == LNET_EVENT_PUT)
CDEBUG(D_INFO, "incoming req@%p x"LPU64" msgsize %u\n",
EXIT;
}
+static int ptlrpc_hpreq_check(struct ptlrpc_request *req)
+{
+ return 1;
+}
+
+static struct ptlrpc_hpreq_ops ptlrpc_hpreq_common = {
+ .hpreq_lock_match = NULL,
+ .hpreq_check = ptlrpc_hpreq_check,
+ .hpreq_fini = NULL,
+};
+
+/* Hi-Priority RPC check by RPC operation code. */
+int ptlrpc_hpreq_handler(struct ptlrpc_request *req)
+{
+ int opc = lustre_msg_get_opc(req->rq_reqmsg);
+
+ /* Check for export to let only reconnects for not yet evicted
+ * export to become a HP rpc. */
+ if ((req->rq_export != NULL) &&
+ (opc == OBD_PING || opc == MDS_CONNECT || opc == OST_CONNECT))
+ req->rq_ops = &ptlrpc_hpreq_common;
+
+ return 0;
+}
+EXPORT_SYMBOL(ptlrpc_hpreq_handler);
+
/**
* Make the request a high priority one.
*
static int ptlrpc_server_hpreq_check(struct ptlrpc_service *svc,
struct ptlrpc_request *req)
{
- ENTRY;
-
- /* Check by request opc. */
- if (OBD_PING == lustre_msg_get_opc(req->rq_reqmsg))
- RETURN(1);
-
- RETURN(ptlrpc_hpreq_init(svc, req));
+ return ptlrpc_hpreq_init(svc, req);
}
/** Check if a request is a high priority one. */