Whamcloud - gitweb
LU-8460 osc: max_pages_per_rpc should be chunk size aligned
[fs/lustre-release.git] / lustre / osc / osc_request.c
index 5161287..1cc95fa 100644 (file)
@@ -937,20 +937,25 @@ static void osc_init_grant(struct client_obd *cli, struct obd_connect_data *ocd)
 
        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);
@@ -1904,6 +1909,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
        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;