unsigned int oap_page_off:PAGE_SHIFT,
oap_cmd:OBD_BRW_WRITE,
- oap_async_flags:OAP_ASYNC_BITS;
+ oap_async_flags:OAP_ASYNC_BITS,
+ /**
+ * Set if the page must be transferred with OBD_BRW_SRVLOCK.
+ */
+ oap_srvlock:1;
} __attribute__((packed));
#define oap_page oap_brw_page.bp_page
/**
* Boolean, true iff page is under transfer. Used for sanity checking.
*/
- unsigned char ops_transfer_pinned:1,
- /**
- * in LRU?
- */
+ unsigned int ops_transfer_pinned:1,
+ /**
+ * in LRU?
+ */
ops_in_lru:1,
- /**
- * Set if the page must be transferred with OBD_BRW_SRVLOCK.
- */
- ops_srvlock:1,
- /**
- * If the page is in osc_object::oo_tree.
- */
+ /**
+ * If the page is in osc_object::oo_tree.
+ */
ops_intree:1;
};
struct osc_page *opg;
opg = osc_cl_page_osc(attr->cra_page, cl2osc(obj));
- if (!opg->ops_srvlock) {
+ if (!opg->ops_oap.oap_srvlock) {
int rc;
rc = mdc_get_lock_handle(env, cl2osc(obj),
RETURN(-EBUSY);
/* Set the OBD_BRW_SRVLOCK before the page is queued. */
- brw_flags |= ops->ops_srvlock ? OBD_BRW_SRVLOCK : 0;
+ brw_flags |= ops->ops_oap.oap_srvlock ? OBD_BRW_SRVLOCK : 0;
if (io->ci_noquota) {
brw_flags |= OBD_BRW_NOQUOTA;
cmd |= OBD_BRW_NOQUOTA;
osc_object_lock(osc);
if (ext->oe_nr_pages == 0)
- ext->oe_srvlock = ops->ops_srvlock;
+ ext->oe_srvlock = ops->ops_oap.oap_srvlock;
else
- LASSERT(ext->oe_srvlock == ops->ops_srvlock);
+ LASSERT(ext->oe_srvlock == ops->ops_oap.oap_srvlock);
++ext->oe_nr_pages;
list_add_tail(&oap->oap_pending_item, &ext->oe_pages);
osc_object_unlock(osc);
/* if srvlock is set, don't look for a local lock, since we won't use
* it and shouldn't note it in the RPC
*/
- if (flags & OBD_MD_FLHANDLE && !opg->ops_srvlock) {
+ if (flags & OBD_MD_FLHANDLE && !opg->ops_oap.oap_srvlock) {
struct ldlm_lock *lock;
lock = osc_dlmlock_at_pgoff(env, cl2osc(obj), osc_index(opg),
cli, obj,
/* 3 */
opg->ops_transfer_pinned,
- opg->ops_srvlock,
+ opg->ops_oap.oap_srvlock,
/* 4 */
cli->cl_r_in_flight, cli->cl_w_in_flight,
cli->cl_max_rpcs_in_flight,
if (result != 0)
return result;
- opg->ops_srvlock = osc_io_srvlock(oio);
+ opg->ops_oap.oap_srvlock = osc_io_srvlock(oio);
if ((lnet_is_rdma_only_page(cl_page->cp_vmpage) ||
CFS_FAIL_CHECK(OBD_FAIL_OSC_UNALIGNED_RDMA_ONLY)) &&
}
/* Extend KMS if it's not a lockless write */
if (loi->loi_kms < last_off &&
- oap2osc_page(last)->ops_srvlock == 0) {
+ last->oap_srvlock == 0) {
attr->cat_kms = last_off;
valid |= CAT_KMS;
}