#define CONNMGR_REQUEST_PORTAL 1
#define CONNMGR_REPLY_PORTAL 2
-#define OSC_REQUEST_PORTAL 3
+//#define OSC_REQUEST_PORTAL 3
#define OSC_REPLY_PORTAL 4
#define OSC_BULK_PORTAL 5
#define OST_REQUEST_PORTAL 6
-#define OST_REPLY_PORTAL 7
+//#define OST_REPLY_PORTAL 7
#define OST_BULK_PORTAL 8
#define MDC_REQUEST_PORTAL 9
#define MDC_REPLY_PORTAL 10
#define LDLM_CLI_REPLY_PORTAL 18
/* default rpc ring length */
-#define RPC_RING_LENGTH 2
+#define RPC_RING_LENGTH 10
#define SVC_KILLED 1
#define SVC_EVENT 2
__u32 cli_reply_portal;
__u64 cli_last_rcvd;
__u64 cli_last_committed;
+ __u32 cli_target_devno;
void *cli_data;
struct semaphore cli_rpc_sem; /* limits outstanding requests */
struct ptlrpc_request {
int rq_type; /* one of PTL_RPC_REQUEST, PTL_RPC_REPLY, PTL_RPC_BULK */
struct list_head rq_list;
+ struct list_head rq_multi;
struct obd_device *rq_obd;
int rq_status;
int rq_flags;
struct ptlrpc_client *rq_client;
};
-struct ptlrpc_bulk_desc {
- int b_flags;
- struct ptlrpc_connection *b_connection;
- __u32 b_portal;
+struct ptlrpc_bulk_page {
+ struct ptlrpc_bulk_desc *b_desc;
+ struct list_head b_link;
char *b_buf;
int b_buflen;
- int (*b_cb)(struct ptlrpc_bulk_desc *, void *);
struct page *b_page;
- struct obd_conn b_conn;
__u32 b_xid;
-
- wait_queue_head_t b_waitq;
+ __u32 b_flags;
+ struct dentry *b_dentry;
+ int (*b_cb)(struct ptlrpc_bulk_page *);
ptl_md_t b_md;
ptl_handle_md_t b_md_h;
ptl_handle_me_t b_me_h;
};
+struct ptlrpc_bulk_desc {
+ int b_flags;
+ struct ptlrpc_connection *b_connection;
+ struct ptlrpc_client *b_client;
+ __u32 b_portal;
+ struct obd_conn b_conn;
+ void (*b_cb)(struct ptlrpc_bulk_desc *, void *);
+ void *b_cb_data;
+
+ wait_queue_head_t b_waitq;
+ struct list_head b_page_list;
+ __u32 b_page_count;
+ atomic_t b_pages_remaining;
+ void *b_desc_private;
+};
+
struct ptlrpc_thread {
struct list_head t_link;
struct ptlrpc_request *req);
};
+typedef void (*bulk_callback_t)(struct ptlrpc_bulk_desc *, void *);
+
typedef int (*svc_handler_t)(struct obd_device *obddev,
struct ptlrpc_service *svc,
struct ptlrpc_request *req);
void ptlrpc_cleanup_connection(void);
/* rpc/niobuf.c */
-int ptlrpc_check_bulk_sent(struct ptlrpc_bulk_desc *);
-int ptlrpc_send_bulk(struct ptlrpc_bulk_desc *, int portal);
+int ptlrpc_check_bulk_sent(struct ptlrpc_bulk_desc *bulk);
+int ptlrpc_send_bulk(struct ptlrpc_bulk_desc *);
int ptlrpc_register_bulk(struct ptlrpc_bulk_desc *);
int ptlrpc_abort_bulk(struct ptlrpc_bulk_desc *bulk);
int ptlrpc_reply(struct ptlrpc_service *svc, struct ptlrpc_request *req);
struct ptlrpc_request *ptlrpc_prep_req(struct ptlrpc_client *cl,
struct ptlrpc_connection *u, int opcode,
int count, int *lengths, char **bufs);
-void ptlrpc_free_bulk(struct ptlrpc_bulk_desc *bulk);
void ptlrpc_free_req(struct ptlrpc_request *request);
void ptlrpc_req_finished(struct ptlrpc_request *request);
struct ptlrpc_bulk_desc *ptlrpc_prep_bulk(struct ptlrpc_connection *);
+void ptlrpc_free_bulk(struct ptlrpc_bulk_desc *bulk);
+struct ptlrpc_bulk_page *ptlrpc_prep_bulk_page(struct ptlrpc_bulk_desc *desc);
+void ptlrpc_free_bulk_page(struct ptlrpc_bulk_page *page);
int ptlrpc_check_status(struct ptlrpc_request *req, int err);
/* rpc/service.c */
void ptlrpc_stop_all_threads(struct ptlrpc_service *svc);
int ptlrpc_start_thread(struct obd_device *dev, struct ptlrpc_service *svc,
char *name);
-int rpc_unregister_service(struct ptlrpc_service *service);
+int ptlrpc_unregister_service(struct ptlrpc_service *service);
struct ptlrpc_svc_data {
char *name;
int lustre_msg_size(int count, int *lengths);
int lustre_unpack_msg(struct lustre_msg *m, int len);
void *lustre_msg_buf(struct lustre_msg *m, int n);
-
#endif