GOTO(out, rc = PTR_ERR(it));
rc = iops->load(env, it, hash);
+ if (rc < 0)
+ GOTO(out_iops_fini, rc);
+
+ /* rc == 0 means we need to advance to record */
if (rc == 0) {
rc = iops->next(env, it);
- if (rc != 0)
- GOTO(out_iops, rc = 0);
+
+ if (rc < 0)
+ GOTO(out_iops_put, rc);
+ /* rc > 0 is eof, will be checked in while below */
+ } else {
+ /* rc == 1, we found initial record and can process below */
+ rc = 0;
}
new_config = nodemap_config_alloc();
if (IS_ERR(new_config)) {
rc = PTR_ERR(new_config);
new_config = NULL;
- GOTO(out_lock, rc);
+ GOTO(out_iops_put, rc);
}
- do {
+ /* rc > 0 is eof, check initial iops->next here as well */
+ while (rc == 0) {
struct nodemap_key *key;
union nodemap_rec rec;
rc = iops->rec(env, it, (struct dt_rec *)&rec, 0);
if (rc != -ESTALE) {
if (rc != 0)
- GOTO(out_lock, rc);
+ GOTO(out_nodemap_config, rc);
rc = nodemap_process_keyrec(new_config, key, &rec,
&recent_nodemap);
if (rc < 0)
- GOTO(out_lock, rc);
+ GOTO(out_nodemap_config, rc);
if (rc == NODEMAP_GLOBAL_IDX)
loaded_global_idx = true;
}
do
rc = iops->next(env, it);
while (rc == -ESTALE);
- } while (rc == 0);
+ }
if (rc > 0)
rc = 0;
-out_lock:
+out_nodemap_config:
if (rc != 0)
nodemap_config_dealloc(new_config);
else
/* creating new default needs to be done outside dt read lock */
activate_nodemap = true;
-out_iops:
+out_iops_put:
iops->put(env, it);
+out_iops_fini:
iops->fini(env, it);
out:
dt_read_unlock(env, nodemap_idx);
RETURN(-EINVAL);
rdpg.rp_count = (body->mcb_units << body->mcb_bits);
- rdpg.rp_npages = (rdpg.rp_count + PAGE_CACHE_SIZE - 1) >>
- PAGE_CACHE_SHIFT;
+ rdpg.rp_npages = (rdpg.rp_count + PAGE_SIZE - 1) >>
+ PAGE_SHIFT;
if (rdpg.rp_npages > PTLRPC_MAX_BRW_PAGES)
RETURN(-EINVAL);
if (rdpg.rp_pages == NULL)
RETURN(-ENOMEM);
for (i = 0; i < rdpg.rp_npages; i++) {
- rdpg.rp_pages[i] = alloc_page(GFP_IOFS);
+ rdpg.rp_pages[i] = alloc_page(GFP_NOFS);
if (rdpg.rp_pages[i] == NULL)
GOTO(out, rc = -ENOMEM);
}
res->mcr_offset = nodemap_ii.ii_hash_end;
res->mcr_size = bytes;
- page_count = (bytes + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
+ page_count = (bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
LASSERT(page_count <= rdpg.rp_count);
desc = ptlrpc_prep_bulk_exp(req, page_count, 1,
PTLRPC_BULK_PUT_SOURCE |
for (i = 0; i < page_count && bytes > 0; i++) {
ptlrpc_prep_bulk_page_pin(desc, rdpg.rp_pages[i], 0,
- min_t(int, bytes, PAGE_CACHE_SIZE));
- bytes -= PAGE_CACHE_SIZE;
+ min_t(int, bytes, PAGE_SIZE));
+ bytes -= PAGE_SIZE;
}
rc = target_bulk_io(req->rq_export, desc, &lwi);