mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-21 16:32:18 +07:00
staging: lustre: echo: request pages in batches
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>
This commit is contained in:
parent
e10a431b3f
commit
832bd71065
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user