void osc_page_submit(const struct lu_env *env, struct osc_page *opg,
enum cl_req_type crt, int brw_flags);
void osc_dio_page_submit(const struct lu_env *env, struct osc_page *opg,
- enum cl_req_type crt, int *brw_flags);
+ enum cl_req_type crt, int brw_flags);
int lru_queue_work(const struct lu_env *env, void *data);
long osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
long target, bool force);
{
struct osc_object *osc = cl2osc(ios->cis_obj);
struct cl_io *top_io = cl_io_top(io);
+ struct osc_io *oio = osc_env_io(env);
struct client_obd *cli = osc_cli(osc);
struct page *vmpage;
LIST_HEAD(list);
if (lnet_is_rdma_only_page(vmpage))
brw_flags |= OBD_BRW_RDMA_ONLY;
+ brw_flags |= OBD_BRW_SYNC;
+
+ if (oio->oi_cap_sys_resource)
+ brw_flags |= OBD_BRW_SYS_RESOURCE;
+
/*
* NOTE: here @page is a top-level page. This is done to avoid
* creation of sub-page-list.
if (from == -1)
from = i;
- osc_dio_page_submit(env, opg, crt, &brw_flags);
+ osc_dio_page_submit(env, opg, crt, brw_flags);
list_add_tail(&oap->oap_pending_item, &list);
queued++;
* Helper function called by osc_io_submit() for every page in a dio
*/
void osc_dio_page_submit(const struct lu_env *env, struct osc_page *opg,
- enum cl_req_type crt, int *brw_flags)
+ enum cl_req_type crt, int brw_flags)
{
struct osc_async_page *oap = &opg->ops_oap;
- struct osc_io *oio = osc_env_io(env);
-
- LASSERT(oap->oap_async_flags & ASYNC_READY);
- LASSERT(oap->oap_async_flags & ASYNC_COUNT_STABLE);
-
- oap->oap_cmd = crt == CRT_WRITE ? OBD_BRW_WRITE : OBD_BRW_READ;
- oap->oap_brw_flags = OBD_BRW_SYNC | *brw_flags;
-
- if (oio->oi_cap_sys_resource)
- oap->oap_brw_flags |= OBD_BRW_SYS_RESOURCE;
- *brw_flags = oap->oap_brw_flags;
+ oap->oap_brw_flags = brw_flags;
}
/**