struct echo_client_obd *ec = &obd->u.echo_client;
LASSERT (eco->eco_refcount == 0);
- if (!eco->eco_lsm)
+ if (!eco->eco_lsm)
CERROR("No object %s\n", obd->obd_name);
- else
+ else
obd_free_memmd(ec->ec_exp, &eco->eco_lsm);
OBD_FREE (eco, sizeof (*eco));
}
if (ulsm != NULL) {
eco = echo_allocate_object (obd);
- if (eco == NULL)
+ if (eco == NULL)
return (-ENOMEM);
lsm = eco->eco_lsm;
}
} else {
OBD_ALLOC(eco, sizeof(*eco));
- if (!eco)
+ if (!eco)
return (-ENOMEM);
eco->eco_device = obd;
lsm = NULL;
failed:
echo_free_object (eco);
- if (rc)
+ if (rc)
CERROR("%s: err %d on create\n", obd->obd_name, rc);
return (rc);
}
*offp = offset * stripe_size + woffset % stripe_size;
}
-static void
-echo_client_page_debug_setup(struct lov_stripe_md *lsm,
- cfs_page_t *page, int rw, obd_id id,
+static void
+echo_client_page_debug_setup(struct lov_stripe_md *lsm,
+ cfs_page_t *page, int rw, obd_id id,
obd_off offset, obd_off count)
{
char *addr;
stripe_off = 0xdeadbeef00c0ffeeULL;
stripe_id = 0xdeadbeef00c0ffeeULL;
}
- block_debug_setup(addr + delta, OBD_ECHO_BLOCK_SIZE,
+ block_debug_setup(addr + delta, OBD_ECHO_BLOCK_SIZE,
stripe_off, stripe_id);
}
}
static int
-echo_client_page_debug_check(struct lov_stripe_md *lsm,
- cfs_page_t *page, obd_id id,
+echo_client_page_debug_check(struct lov_stripe_md *lsm,
+ cfs_page_t *page, obd_id id,
obd_off offset, obd_off count)
{
obd_off stripe_off;
stripe_id = id;
echo_get_stripe_off_id (lsm, &stripe_off, &stripe_id);
- rc2 = block_debug_check("test_brw",
- addr + delta, OBD_ECHO_BLOCK_SIZE,
+ rc2 = block_debug_check("test_brw",
+ addr + delta, OBD_ECHO_BLOCK_SIZE,
stripe_off, stripe_id);
if (rc2 != 0) {
CERROR ("Error in echo object "LPX64"\n", id);
struct echo_client_obd *ec = &obd->u.echo_client;
struct obd_info oinfo = { { { 0 } } };
obd_count npages;
+ struct ptlrpc_request_set *set = NULL;
struct brw_page *pga;
struct brw_page *pgp;
obd_off off;
(count & (~CFS_PAGE_MASK)) != 0)
return (-EINVAL);
+ set = ptlrpc_prep_set();
+ if (set == NULL)
+ RETURN(-ENOMEM);
+
/* XXX think again with misaligned I/O */
npages = count >> CFS_PAGE_SHIFT;
oinfo.oi_oa = oa;
oinfo.oi_md = lsm;
- rc = obd_brw(rw, ec->ec_exp, &oinfo, npages, pga, oti);
+ rc = obd_brw_async(rw, ec->ec_exp, &oinfo, npages, pga, oti, set);
+ if (rc == 0) {
+ rc = ptlrpc_set_wait(set);
+ if (rc)
+ CERROR("error from callback: rc = %d\n", rc);
+ } else {
+ CDEBUG(rc == -ENOSPC ? D_INODE : D_ERROR,
+ "error from obd_brw_async: rc = %d\n", rc);
+ }
+ ptlrpc_set_destroy(set);
out:
if (rc != 0 || rw != OBD_BRW_READ)
verify = 0;
eas->eas_oa.o_id != ECHO_PERSISTENT_OBJID &&
(eas->eas_oa.o_valid & OBD_MD_FLFLAGS) != 0 &&
(eas->eas_oa.o_flags & OBD_FL_DEBUG_CHECK) != 0)
- echo_client_page_debug_check(eas->eas_lsm, eap->eap_page,
+ echo_client_page_debug_check(eas->eas_lsm, eap->eap_page,
eas->eas_oa.o_id, eap->eap_off,
CFS_PAGE_SIZE);
/* sleep until we have a page to send */
spin_unlock(&eas.eas_lock);
- rc = wait_event_interruptible(eas.eas_waitq,
+ rc = wait_event_interruptible(eas.eas_waitq,
eas_should_wake(&eas));
spin_lock(&eas.eas_lock);
if (rc && !eas.eas_rc)
/* unbind the eap from its old page offset */
if (eap->eap_cookie != NULL) {
- obd_teardown_async_page(exp, lsm, NULL,
+ obd_teardown_async_page(exp, lsm, NULL,
eap->eap_cookie);
eap->eap_cookie = NULL;
}
if (oa->o_id != ECHO_PERSISTENT_OBJID &&
(oa->o_valid & OBD_MD_FLFLAGS) != 0 &&
(oa->o_flags & OBD_FL_DEBUG_CHECK) != 0)
- echo_client_page_debug_setup(lsm, eap->eap_page, rw,
- oa->o_id,
+ echo_client_page_debug_setup(lsm, eap->eap_page, rw,
+ oa->o_id,
eap->eap_off, CFS_PAGE_SIZE);
/* always asserts urgent, which isn't quite right */
eas.eas_in_flight++;
if (eas.eas_next_offset == eas.eas_end_offset)
break;
- }
+ }
/* still hold the eas_lock here.. */
/* now we just spin waiting for all the rpcs to complete */
while(eas.eas_in_flight) {
spin_unlock(&eas.eas_lock);
- wait_event_interruptible(eas.eas_waitq,
+ wait_event_interruptible(eas.eas_waitq,
eas.eas_in_flight == 0);
spin_lock(&eas.eas_lock);
}
static int echo_client_prep_commit(struct obd_export *exp, int rw,
struct obdo *oa, struct lov_stripe_md *lsm,
- obd_off offset, obd_size count,
+ obd_off offset, obd_size count,
obd_size batch, struct obd_trans_info *oti)
{
struct obd_ioobj ioo;
out:
/* XXX this should be in a helper also called by target_send_reply */
- for (ack_lock = dummy_oti.oti_ack_locks, i = 0; i < 4;
+ for (ack_lock = dummy_oti.oti_ack_locks, i = 0; i < 4;
i++, ack_lock++) {
if (!ack_lock->mode)
break;