if (OCD_HAS_FLAG(ocd, GRANT_PARAM)) {
u64 size;
+ int chunk_mask;
/* overhead for each extent insertion */
cli->cl_grant_extent_tax = ocd->ocd_grant_tax_kb << 10;
/* determine the appropriate chunk size used by osc_extent. */
- cli->cl_chunkbits = max_t(int, PAGE_CACHE_SHIFT,
+ cli->cl_chunkbits = max_t(int, PAGE_SHIFT,
ocd->ocd_grant_blkbits);
+ /* max_pages_per_rpc must be chunk aligned */
+ chunk_mask = ~((1 << (cli->cl_chunkbits - PAGE_SHIFT)) - 1);
+ cli->cl_max_pages_per_rpc = (cli->cl_max_pages_per_rpc +
+ ~chunk_mask) & chunk_mask;
/* determine maximum extent size, in #pages */
size = (u64)ocd->ocd_grant_max_blks << ocd->ocd_grant_blkbits;
- cli->cl_max_extent_pages = size >> PAGE_CACHE_SHIFT;
+ cli->cl_max_extent_pages = size >> PAGE_SHIFT;
if (cli->cl_max_extent_pages == 0)
cli->cl_max_extent_pages = 1;
} else {
cli->cl_grant_extent_tax = 0;
- cli->cl_chunkbits = PAGE_CACHE_SHIFT;
+ cli->cl_chunkbits = PAGE_SHIFT;
cli->cl_max_extent_pages = DT_MAX_BRW_PAGES;
}
spin_unlock(&cli->cl_loi_list_lock);
DEBUG_REQ(D_INODE, req, "%d pages, aa %p. now %ur/%uw in flight",
page_count, aa, cli->cl_r_in_flight,
cli->cl_w_in_flight);
+ OBD_FAIL_TIMEOUT(OBD_FAIL_OSC_DELAY_IO, 4);
ptlrpcd_add_req(req);
rc = 0;