Whamcloud - gitweb
LU-13004 osp: use KIOV in osp_prep_update_req
[fs/lustre-release.git] / lustre / osp / osp_trans.c
index 90b9e47..9686863 100644 (file)
@@ -347,6 +347,7 @@ int osp_prep_update_req(const struct lu_env *env, struct obd_import *imp,
        struct out_update_header        *ouh;
        struct out_update_buffer        *oub;
        __u32                           buf_count = 0;
+       int                             page_count = 0;
        int                             repsize = 0;
        struct object_update_reply      *reply;
        int                             rc, i;
@@ -418,13 +419,14 @@ int osp_prep_update_req(const struct lu_env *env, struct obd_import *imp,
        list_for_each_entry(ours, &our->our_req_list, ours_list) {
                oub->oub_size = ours->ours_req_size;
                oub++;
+               page_count += round_up(ours->ours_req_size, PAGE_SIZE) + 1;
        }
 
        req->rq_bulk_write = 1;
-       desc = ptlrpc_prep_bulk_imp(req, buf_count,
+       desc = ptlrpc_prep_bulk_imp(req, page_count,
                MD_MAX_BRW_SIZE >> LNET_MTU_BITS,
-               PTLRPC_BULK_GET_SOURCE | PTLRPC_BULK_BUF_KVEC,
-               MDS_BULK_PORTAL, &ptlrpc_bulk_kvec_ops);
+               PTLRPC_BULK_GET_SOURCE | PTLRPC_BULK_BUF_KIOV,
+               MDS_BULK_PORTAL, &ptlrpc_bulk_kiov_nopin_ops);
        if (desc == NULL)
                GOTO(out_req, rc = -ENOMEM);
 
@@ -1376,8 +1378,6 @@ void osp_invalidate_request(struct osp_device *osp)
                return;
        }
 
-       INIT_LIST_HEAD(&list);
-
        spin_lock(&ou->ou_lock);
        /* invalidate all of request in the sending list */
        list_for_each_entry_safe(our, tmp, &ou->ou_list, our_list) {
@@ -1432,7 +1432,6 @@ int osp_send_update_thread(void *arg)
 {
        struct lu_env           env;
        struct osp_device       *osp = arg;
-       struct l_wait_info       lwi = { 0 };
        struct osp_updates      *ou = osp->opd_update;
        struct ptlrpc_thread    *thread = &osp->opd_update_thread;
        struct osp_update_request *our = NULL;
@@ -1451,9 +1450,9 @@ int osp_send_update_thread(void *arg)
        wake_up(&thread->t_ctl_waitq);
        while (1) {
                our = NULL;
-               l_wait_event(ou->ou_waitq,
-                            !osp_send_update_thread_running(osp) ||
-                            osp_get_next_request(ou, &our), &lwi);
+               wait_event_idle(ou->ou_waitq,
+                               !osp_send_update_thread_running(osp) ||
+                               osp_get_next_request(ou, &our));
 
                if (!osp_send_update_thread_running(osp)) {
                        if (our != NULL) {