staging: lustre: echo: request pages in batches
authorAlex Zhuravlev <alexey.zhuravlev@intel.com>
Mon, 3 Oct 2016 02:28:37 +0000 (22:28 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Oct 2016 08:24:41 +0000 (10:24 +0200)
rather than fetch them one by one.

Signed-off-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5278
Reviewed-on: http://review.whamcloud.com/13612
Reviewed-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/obdecho/echo_client.c

index d8e3e96..c69588c 100644 (file)
@@ -1335,7 +1335,7 @@ static int echo_client_prep_commit(const struct lu_env *env,
 {
        struct obd_ioobj ioo;
        struct niobuf_local *lnb;
-       struct niobuf_remote *rnb;
+       struct niobuf_remote rnb;
        u64 off;
        u64 npages, tot_pages;
        int i, ret = 0, brw_flags = 0;
@@ -1347,9 +1347,7 @@ static int echo_client_prep_commit(const struct lu_env *env,
        tot_pages = count >> PAGE_SHIFT;
 
        lnb = kcalloc(npages, sizeof(struct niobuf_local), GFP_NOFS);
-       rnb = kcalloc(npages, sizeof(struct niobuf_remote), GFP_NOFS);
-
-       if (!lnb || !rnb) {
+       if (!lnb) {
                ret = -ENOMEM;
                goto out;
        }
@@ -1361,25 +1359,22 @@ static int echo_client_prep_commit(const struct lu_env *env,
 
        off = offset;
 
-       for (; tot_pages; tot_pages -= npages) {
+       for (; tot_pages > 0; tot_pages -= npages) {
                int lpages;
 
                if (tot_pages < npages)
                        npages = tot_pages;
 
-               for (i = 0; i < npages; i++, off += PAGE_SIZE) {
-                       rnb[i].rnb_offset = off;
-                       rnb[i].rnb_len = PAGE_SIZE;
-                       rnb[i].rnb_flags = brw_flags;
-               }
-
-               ioo.ioo_bufcnt = npages;
+               rnb.rnb_offset = off;
+               rnb.rnb_len = npages * PAGE_SIZE;
+               rnb.rnb_flags = brw_flags;
+               ioo.ioo_bufcnt = 1;
+               off += npages * PAGE_SIZE;
 
                lpages = npages;
-               ret = obd_preprw(env, rw, exp, oa, 1, &ioo, rnb, &lpages, lnb);
+               ret = obd_preprw(env, rw, exp, oa, 1, &ioo, &rnb, &lpages, lnb);
                if (ret != 0)
                        goto out;
-               LASSERT(lpages == npages);
 
                for (i = 0; i < lpages; i++) {
                        struct page *page = lnb[i].lnb_page;
@@ -1398,17 +1393,17 @@ static int echo_client_prep_commit(const struct lu_env *env,
 
                        if (rw == OBD_BRW_WRITE)
                                echo_client_page_debug_setup(page, rw,
-                                                           ostid_id(&oa->o_oi),
-                                                            rnb[i].rnb_offset,
-                                                            rnb[i].rnb_len);
+                                                            ostid_id(&oa->o_oi),
+                                                            lnb[i].lnb_file_offset,
+                                                            lnb[i].lnb_len);
                        else
                                echo_client_page_debug_check(page,
-                                                           ostid_id(&oa->o_oi),
-                                                            rnb[i].rnb_offset,
-                                                            rnb[i].rnb_len);
+                                                            ostid_id(&oa->o_oi),
+                                                            lnb[i].lnb_file_offset,
+                                                            lnb[i].lnb_len);
                }
 
-               ret = obd_commitrw(env, rw, exp, oa, 1, &ioo, rnb, npages, lnb,
+               ret = obd_commitrw(env, rw, exp, oa, 1, &ioo, &rnb, npages, lnb,
                                   ret);
                if (ret != 0)
                        goto out;
@@ -1420,7 +1415,6 @@ static int echo_client_prep_commit(const struct lu_env *env,
 
 out:
        kfree(lnb);
-       kfree(rnb);
        return ret;
 }