RETURN(0);
}
-static int osp_sync_timeout(void *data)
-{
- return 1;
-}
-
/**
* Implementation of dt_device_operations::dt_sync
*
static int osp_sync(const struct lu_env *env, struct dt_device *dev)
{
struct osp_device *d = dt2osp_dev(dev);
- struct l_wait_info lwi = { 0 };
time64_t start = ktime_get_seconds();
int recs, rc = 0;
u64 old;
atomic_read(&d->opd_async_updates_count));
/* make sure the connection is fine */
- lwi = LWI_TIMEOUT(cfs_time_seconds(obd_timeout), osp_sync_timeout, d);
- rc = l_wait_event(d->opd_sync_barrier_waitq,
- atomic_read(&d->opd_async_updates_count) == 0,
- &lwi);
+ rc = wait_event_idle_timeout(
+ d->opd_sync_barrier_waitq,
+ atomic_read(&d->opd_async_updates_count) == 0,
+ cfs_time_seconds(obd_timeout));
+ if (rc > 0)
+ rc = 0;
+ else if (rc == 0)
+ rc = -ETIMEDOUT;
+
up_write(&d->opd_async_updates_rwsem);
if (rc != 0)
GOTO(out, rc);
while (atomic64_read(&d->opd_sync_processed_recs) < old + recs) {
__u64 last = atomic64_read(&d->opd_sync_processed_recs);
/* make sure the connection is fine */
- lwi = LWI_TIMEOUT(cfs_time_seconds(obd_timeout),
- osp_sync_timeout, d);
- l_wait_event(d->opd_sync_barrier_waitq,
- atomic64_read(&d->opd_sync_processed_recs)
- >= old + recs, &lwi);
+ wait_event_idle_timeout(
+ d->opd_sync_barrier_waitq,
+ atomic64_read(&d->opd_sync_processed_recs)
+ >= old + recs,
+ cfs_time_seconds(obd_timeout));
if (atomic64_read(&d->opd_sync_processed_recs) >= old + recs)
break;
while (atomic_read(&d->opd_sync_rpcs_in_flight) > 0) {
old = atomic_read(&d->opd_sync_rpcs_in_flight);
- lwi = LWI_TIMEOUT(cfs_time_seconds(obd_timeout),
- osp_sync_timeout, d);
- l_wait_event(d->opd_sync_barrier_waitq,
- atomic_read(&d->opd_sync_rpcs_in_flight) == 0,
- &lwi);
+ wait_event_idle_timeout(
+ d->opd_sync_barrier_waitq,
+ atomic_read(&d->opd_sync_rpcs_in_flight) == 0,
+ cfs_time_seconds(obd_timeout));
if (atomic_read(&d->opd_sync_rpcs_in_flight) == 0)
break;
return 0;
}
-static int osp_precreate_timeout_condition(void *data)
-{
- struct osp_device *d = data;
-
- CDEBUG(D_HA, "%s: slow creates, last="DFID", next="DFID", "
- "reserved=%llu, sync_changes=%u, "
- "sync_rpcs_in_progress=%d, status=%d\n",
- d->opd_obd->obd_name, PFID(&d->opd_pre_last_created_fid),
- PFID(&d->opd_pre_used_fid), d->opd_pre_reserved,
- atomic_read(&d->opd_sync_changes),
- atomic_read(&d->opd_sync_rpcs_in_progress),
- d->opd_pre_status);
-
- return 1;
-}
-
/**
* Reserve object in precreate pool
*
int osp_precreate_reserve(const struct lu_env *env, struct osp_device *d)
{
time64_t expire = ktime_get_seconds() + obd_timeout;
- struct l_wait_info lwi;
int precreated, rc, synced = 0;
ENTRY;
/* XXX: don't wake up if precreation is in progress */
wake_up(&d->opd_pre_waitq);
- lwi = LWI_TIMEOUT(cfs_time_seconds(obd_timeout),
- osp_precreate_timeout_condition, d);
if (ktime_get_seconds() >= expire) {
rc = -ETIMEDOUT;
break;
}
- l_wait_event(d->opd_pre_user_waitq,
- osp_precreate_ready_condition(env, d), &lwi);
+ if (wait_event_idle_timeout(
+ d->opd_pre_user_waitq,
+ osp_precreate_ready_condition(env, d),
+ cfs_time_seconds(obd_timeout)) == 0) {
+ CDEBUG(D_HA,
+ "%s: slow creates, last="DFID", next="DFID", "
+ "reserved=%llu, sync_changes=%u, "
+ "sync_rpcs_in_progress=%d, status=%d\n",
+ d->opd_obd->obd_name,
+ PFID(&d->opd_pre_last_created_fid),
+ PFID(&d->opd_pre_used_fid), d->opd_pre_reserved,
+ atomic_read(&d->opd_sync_changes),
+ atomic_read(&d->opd_sync_rpcs_in_progress),
+ d->opd_pre_status);
+ }
}
RETURN(rc);