本文整理汇总了C++中cfs_time_current函数的典型用法代码示例。如果您正苦于以下问题:C++ cfs_time_current函数的具体用法?C++ cfs_time_current怎么用?C++ cfs_time_current使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cfs_time_current函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lfsck_namespace_checkpoint
static int lfsck_namespace_checkpoint(const struct lu_env *env,
struct lfsck_component *com, bool init)
{
struct lfsck_instance *lfsck = com->lc_lfsck;
struct lfsck_namespace *ns = com->lc_file_ram;
int rc;
if (com->lc_new_checked == 0 && !init)
return 0;
down_write(&com->lc_sem);
if (init) {
ns->ln_pos_latest_start = lfsck->li_pos_current;
} else {
ns->ln_pos_last_checkpoint = lfsck->li_pos_current;
ns->ln_run_time_phase1 += cfs_duration_sec(cfs_time_current() +
HALF_SEC - lfsck->li_time_last_checkpoint);
ns->ln_time_last_checkpoint = cfs_time_current_sec();
ns->ln_items_checked += com->lc_new_checked;
com->lc_new_checked = 0;
}
rc = lfsck_namespace_store(env, com, false);
up_write(&com->lc_sem);
return rc;
}
示例2: ldlm_handle_gl_callback
/**
* Callback handler for receiving incoming glimpse ASTs.
*
* This only can happen on client side. After handling the glimpse AST
* we also consider dropping the lock here if it is unused locally for a
* long time.
*/
static void ldlm_handle_gl_callback(struct ptlrpc_request *req,
struct ldlm_namespace *ns,
struct ldlm_request *dlm_req,
struct ldlm_lock *lock)
{
int rc = -ENOSYS;
LDLM_DEBUG(lock, "client glimpse AST callback handler");
if (lock->l_glimpse_ast != NULL)
rc = lock->l_glimpse_ast(lock, req);
if (req->rq_repmsg != NULL) {
ptlrpc_reply(req);
} else {
req->rq_status = rc;
ptlrpc_error(req);
}
lock_res_and_lock(lock);
if (lock->l_granted_mode == LCK_PW &&
!lock->l_readers && !lock->l_writers &&
cfs_time_after(cfs_time_current(),
cfs_time_add(lock->l_last_used,
cfs_time_seconds(10)))) {
unlock_res_and_lock(lock);
if (ldlm_bl_to_thread_lock(ns, NULL, lock))
ldlm_handle_bl_callback(ns, NULL, lock);
return;
}
unlock_res_and_lock(lock);
LDLM_LOCK_RELEASE(lock);
}
示例3: osc_object_is_contended
int osc_object_is_contended(struct osc_object *obj)
{
struct osc_device *dev = lu2osc_dev(obj->oo_cl.co_lu.lo_dev);
int osc_contention_time = dev->od_contention_time;
unsigned long cur_time = cfs_time_current();
unsigned long retry_time;
if (OBD_FAIL_CHECK(OBD_FAIL_OSC_OBJECT_CONTENTION))
return 1;
if (!obj->oo_contended)
return 0;
/*
* I like copy-paste. the code is copied from
* ll_file_is_contended.
*/
retry_time = cfs_time_add(obj->oo_contention_time,
cfs_time_seconds(osc_contention_time));
if (cfs_time_after(cur_time, retry_time)) {
osc_object_clear_contended(obj);
return 0;
}
return 1;
}
示例4: cfs_timer_is_armed
int cfs_timer_is_armed(cfs_timer_t *l)
{
if (cfs_time_before(cfs_time_current(), l->expires))
return 1;
else
return 0;
}
示例5: libcfs_sock_write
int
libcfs_sock_write (cfs_socket_t *sock, void *buffer, int nob, int timeout)
{
int rc;
struct pollfd pfd;
cfs_time_t start_time = cfs_time_current();
pfd.fd = sock->s_fd;
pfd.events = POLLOUT;
pfd.revents = 0;
/* poll(2) measures timeout in msec */
timeout *= 1000;
while (nob != 0 && timeout > 0) {
cfs_time_t current_time;
rc = poll(&pfd, 1, timeout);
if (rc < 0)
return -errno;
if (rc == 0)
return -ETIMEDOUT;
if ((pfd.revents & POLLOUT) == 0)
return -EIO;
rc = write(sock->s_fd, buffer, nob);
if (rc < 0)
return -errno;
if (rc == 0)
return -EIO;
buffer = ((char *)buffer) + rc;
nob -= rc;
current_time = cfs_time_current();
timeout -= 1000 *
cfs_duration_sec(cfs_time_sub(current_time,
start_time));
start_time = current_time;
}
if (nob == 0)
return 0;
else
return -ETIMEDOUT;
}
示例6: osp_init_precreate
int osp_init_precreate(struct osp_device *d)
{
struct l_wait_info lwi = { 0 };
struct task_struct *task;
ENTRY;
OBD_ALLOC_PTR(d->opd_pre);
if (d->opd_pre == NULL)
RETURN(-ENOMEM);
/* initially precreation isn't ready */
d->opd_pre_status = -EAGAIN;
fid_zero(&d->opd_pre_used_fid);
d->opd_pre_used_fid.f_oid = 1;
fid_zero(&d->opd_pre_last_created_fid);
d->opd_pre_last_created_fid.f_oid = 1;
d->opd_pre_reserved = 0;
d->opd_got_disconnected = 1;
d->opd_pre_grow_slow = 0;
d->opd_pre_grow_count = OST_MIN_PRECREATE;
d->opd_pre_min_grow_count = OST_MIN_PRECREATE;
d->opd_pre_max_grow_count = OST_MAX_PRECREATE;
spin_lock_init(&d->opd_pre_lock);
init_waitqueue_head(&d->opd_pre_waitq);
init_waitqueue_head(&d->opd_pre_user_waitq);
init_waitqueue_head(&d->opd_pre_thread.t_ctl_waitq);
/*
* Initialize statfs-related things
*/
d->opd_statfs_maxage = 5; /* default update interval */
d->opd_statfs_fresh_till = cfs_time_shift(-1000);
CDEBUG(D_OTHER, "current %llu, fresh till %llu\n",
(unsigned long long)cfs_time_current(),
(unsigned long long)d->opd_statfs_fresh_till);
cfs_timer_init(&d->opd_statfs_timer, osp_statfs_timer_cb, d);
/*
* start thread handling precreation and statfs updates
*/
task = kthread_run(osp_precreate_thread, d,
"osp-pre-%u-%u", d->opd_index, d->opd_group);
if (IS_ERR(task)) {
CERROR("can't start precreate thread %ld\n", PTR_ERR(task));
RETURN(PTR_ERR(task));
}
l_wait_event(d->opd_pre_thread.t_ctl_waitq,
osp_precreate_running(d) || osp_precreate_stopped(d),
&lwi);
RETURN(0);
}
示例7: libcfs_sock_read
ssize_t
libcfs_sock_read(struct lnet_xport *lx, void *buffer, size_t nob,
int timeout)
{
ssize_t rc;
struct pollfd pfd;
cfs_time_t start_time = cfs_time_current();
pfd.fd = lx->lx_fd;
pfd.events = POLLIN;
pfd.revents = 0;
/* poll(2) measures timeout in msec */
timeout *= 1000;
while (nob != 0 && timeout > 0) {
rc = poll(&pfd, 1, timeout);
if (rc < 0)
return -errno;
if (rc == 0)
return -ETIMEDOUT;
if ((pfd.revents & POLLIN) == 0)
return -EIO;
rc = read(lx->lx_fd, buffer, nob);
if (rc < 0)
return -errno;
if (rc == 0)
return -EIO;
buffer = ((char *)buffer) + rc;
nob -= rc;
timeout -= cfs_duration_sec(cfs_time_sub(cfs_time_current(),
start_time));
}
if (nob == 0)
return 0;
else
return -ETIMEDOUT;
}
示例8: libcfs_ssl_sock_read
ssize_t
libcfs_ssl_sock_read(struct lnet_xport *lx, void *buf, size_t n,
int timeout)
{
cfs_time_t start_time = cfs_time_current();
struct pollfd pfd;
ssize_t rc;
pfd.fd = lx->lx_fd;
pfd.events = POLLIN;
pfd.revents = 0;
/* poll(2) measures timeout in msec */
timeout *= 1000;
while (n != 0 && timeout > 0) {
rc = poll(&pfd, 1, timeout);
if (rc < 0)
return (-errno);
if (rc == 0)
return (-ETIMEDOUT);
if ((pfd.revents & POLLIN) == 0)
return (-EIO);
rc = SSL_read(lx->lx_ssl, buf, n);
if (rc < 0)
return (-errno);
if (rc == 0)
return (-EIO);
buf = (char *)buf + rc;
n -= rc;
timeout -= cfs_duration_sec(cfs_time_sub(
cfs_time_current(), start_time));
}
if (n == 0)
return (0);
return (-ETIMEDOUT);
}
示例9: osd_read
static ssize_t osd_read(const struct lu_env *env, struct dt_object *dt,
struct lu_buf *buf, loff_t *pos)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_device *osd = osd_obj2dev(obj);
uint64_t old_size;
int size = buf->lb_len;
int rc;
unsigned long start;
LASSERT(dt_object_exists(dt));
LASSERT(obj->oo_db);
start = cfs_time_current();
read_lock(&obj->oo_attr_lock);
old_size = obj->oo_attr.la_size;
read_unlock(&obj->oo_attr_lock);
if (*pos + size > old_size) {
if (old_size < *pos)
return 0;
else
size = old_size - *pos;
}
record_start_io(osd, READ, 0);
rc = -dmu_read(osd->od_os, obj->oo_db->db_object, *pos, size,
buf->lb_buf, DMU_READ_PREFETCH);
record_end_io(osd, READ, cfs_time_current() - start, size,
size >> PAGE_CACHE_SHIFT);
if (rc == 0) {
rc = size;
*pos += size;
}
return rc;
}
示例10: usocklnd_read_data
/* Read from wire as much data as possible.
* Returns 0 or 1 on succsess, <0 if error or EOF.
* 0 means partial read, 1 - complete */
int
usocklnd_read_data(usock_conn_t *conn)
{
struct iovec *iov;
int nob;
cfs_time_t t;
LASSERT (conn->uc_rx_nob_wanted != 0);
do {
usock_peer_t *peer = conn->uc_peer;
LASSERT (conn->uc_rx_niov > 0);
nob = libcfs_sock_readv(conn->uc_sock,
conn->uc_rx_iov, conn->uc_rx_niov);
if (nob <= 0) {/* read nothing or error */
if (nob < 0)
conn->uc_errored = 1;
return nob;
}
LASSERT (nob <= conn->uc_rx_nob_wanted);
conn->uc_rx_nob_wanted -= nob;
conn->uc_rx_nob_left -= nob;
t = cfs_time_current();
conn->uc_rx_deadline = cfs_time_add(t, cfs_time_seconds(usock_tuns.ut_timeout));
if(peer != NULL)
peer->up_last_alive = t;
/* "consume" iov */
iov = conn->uc_rx_iov;
do {
LASSERT (conn->uc_rx_niov > 0);
if (nob < iov->iov_len) {
iov->iov_base = (void *)(((unsigned long)(iov->iov_base)) + nob);
iov->iov_len -= nob;
break;
}
nob -= iov->iov_len;
conn->uc_rx_iov = ++iov;
conn->uc_rx_niov--;
} while (nob != 0);
} while (conn->uc_rx_nob_wanted != 0);
return 1; /* read complete */
}
示例11: void
struct lc_watchdog *lc_watchdog_add(int timeout,
void (*callback)(pid_t, void *),
void *data)
{
struct lc_watchdog *lcw = NULL;
ENTRY;
LIBCFS_ALLOC(lcw, sizeof(*lcw));
if (lcw == NULL) {
CDEBUG(D_INFO, "Could not allocate new lc_watchdog\n");
RETURN(ERR_PTR(-ENOMEM));
}
cfs_spin_lock_init(&lcw->lcw_lock);
lcw->lcw_refcount = 1; /* refcount for owner */
lcw->lcw_task = cfs_current();
lcw->lcw_pid = cfs_curproc_pid();
lcw->lcw_callback = (callback != NULL) ? callback : lc_watchdog_dumplog;
lcw->lcw_data = data;
lcw->lcw_state = LC_WATCHDOG_DISABLED;
CFS_INIT_LIST_HEAD(&lcw->lcw_list);
cfs_timer_init(&lcw->lcw_timer, lcw_cb, lcw);
cfs_down(&lcw_refcount_sem);
if (++lcw_refcount == 1)
lcw_dispatch_start();
cfs_up(&lcw_refcount_sem);
/* Keep this working in case we enable them by default */
if (lcw->lcw_state == LC_WATCHDOG_ENABLED) {
lcw->lcw_last_touched = cfs_time_current();
cfs_timer_arm(&lcw->lcw_timer, cfs_time_seconds(timeout) +
cfs_time_current());
}
RETURN(lcw);
}
示例12: osp_init_precreate
int osp_init_precreate(struct osp_device *d)
{
struct l_wait_info lwi = { 0 };
int rc;
ENTRY;
/* initially precreation isn't ready */
d->opd_pre_status = -EAGAIN;
fid_zero(&d->opd_pre_used_fid);
d->opd_pre_used_fid.f_oid = 1;
fid_zero(&d->opd_pre_last_created_fid);
d->opd_pre_last_created_fid.f_oid = 1;
d->opd_pre_reserved = 0;
d->opd_got_disconnected = 1;
d->opd_pre_grow_slow = 0;
d->opd_pre_grow_count = OST_MIN_PRECREATE;
d->opd_pre_min_grow_count = OST_MIN_PRECREATE;
d->opd_pre_max_grow_count = OST_MAX_PRECREATE;
spin_lock_init(&d->opd_pre_lock);
cfs_waitq_init(&d->opd_pre_waitq);
cfs_waitq_init(&d->opd_pre_user_waitq);
cfs_waitq_init(&d->opd_pre_thread.t_ctl_waitq);
/*
* Initialize statfs-related things
*/
d->opd_statfs_maxage = 5; /* default update interval */
d->opd_statfs_fresh_till = cfs_time_shift(-1000);
CDEBUG(D_OTHER, "current %llu, fresh till %llu\n",
(unsigned long long)cfs_time_current(),
(unsigned long long)d->opd_statfs_fresh_till);
cfs_timer_init(&d->opd_statfs_timer, osp_statfs_timer_cb, d);
/*
* start thread handling precreation and statfs updates
*/
rc = cfs_create_thread(osp_precreate_thread, d, 0);
if (rc < 0) {
CERROR("can't start precreate thread %d\n", rc);
RETURN(rc);
}
l_wait_event(d->opd_pre_thread.t_ctl_waitq,
osp_precreate_running(d) || osp_precreate_stopped(d),
&lwi);
RETURN(0);
}
示例13: lfsck_namespace_post
static int lfsck_namespace_post(const struct lu_env *env,
struct lfsck_component *com,
int result, bool init)
{
struct lfsck_instance *lfsck = com->lc_lfsck;
struct lfsck_namespace *ns = com->lc_file_ram;
int rc;
down_write(&com->lc_sem);
spin_lock(&lfsck->li_lock);
if (!init)
ns->ln_pos_last_checkpoint = lfsck->li_pos_current;
if (result > 0) {
ns->ln_status = LS_SCANNING_PHASE2;
ns->ln_flags |= LF_SCANNED_ONCE;
ns->ln_flags &= ~LF_UPGRADE;
cfs_list_del_init(&com->lc_link);
cfs_list_del_init(&com->lc_link_dir);
cfs_list_add_tail(&com->lc_link, &lfsck->li_list_double_scan);
} else if (result == 0) {
ns->ln_status = lfsck->li_status;
if (ns->ln_status == 0)
ns->ln_status = LS_STOPPED;
if (ns->ln_status != LS_PAUSED) {
cfs_list_del_init(&com->lc_link);
cfs_list_del_init(&com->lc_link_dir);
cfs_list_add_tail(&com->lc_link, &lfsck->li_list_idle);
}
} else {
ns->ln_status = LS_FAILED;
cfs_list_del_init(&com->lc_link);
cfs_list_del_init(&com->lc_link_dir);
cfs_list_add_tail(&com->lc_link, &lfsck->li_list_idle);
}
spin_unlock(&lfsck->li_lock);
if (!init) {
ns->ln_run_time_phase1 += cfs_duration_sec(cfs_time_current() +
HALF_SEC - lfsck->li_time_last_checkpoint);
ns->ln_time_last_checkpoint = cfs_time_current_sec();
ns->ln_items_checked += com->lc_new_checked;
com->lc_new_checked = 0;
}
rc = lfsck_namespace_store(env, com, false);
up_write(&com->lc_sem);
return rc;
}
示例14: usocklnd_send_tx
/* Send as much tx data as possible.
* Returns 0 or 1 on succsess, <0 if fatal error.
* 0 means partial send or non-fatal error, 1 - complete.
* Rely on libcfs_sock_writev() for differentiating fatal and
* non-fatal errors. An error should be considered as non-fatal if:
* 1) it still makes sense to continue reading &&
* 2) anyway, poll() will set up POLLHUP|POLLERR flags */
int
usocklnd_send_tx(usock_conn_t *conn, usock_tx_t *tx)
{
struct iovec *iov;
int nob;
cfs_time_t t;
LASSERT (tx->tx_resid != 0);
do {
usock_peer_t *peer = conn->uc_peer;
LASSERT (tx->tx_niov > 0);
nob = libcfs_sock_writev(conn->uc_sock,
tx->tx_iov, tx->tx_niov);
if (nob < 0)
conn->uc_errored = 1;
if (nob <= 0) /* write queue is flow-controlled or error */
return nob;
LASSERT (nob <= tx->tx_resid);
tx->tx_resid -= nob;
t = cfs_time_current();
conn->uc_tx_deadline = cfs_time_add(t, cfs_time_seconds(usock_tuns.ut_timeout));
if(peer != NULL)
peer->up_last_alive = t;
/* "consume" iov */
iov = tx->tx_iov;
do {
LASSERT (tx->tx_niov > 0);
if (nob < iov->iov_len) {
iov->iov_base = (void *)(((unsigned long)(iov->iov_base)) + nob);
iov->iov_len -= nob;
break;
}
nob -= iov->iov_len;
tx->tx_iov = ++iov;
tx->tx_niov--;
} while (nob != 0);
} while (tx->tx_resid != 0);
return 1; /* send complete */
}
示例15: lc_watchdog_touch
void lc_watchdog_touch(struct lc_watchdog *lcw, int timeout)
{
ENTRY;
LASSERT(lcw != NULL);
lc_watchdog_del_pending(lcw);
lcw_update_time(lcw, "resumed");
lcw->lcw_state = LC_WATCHDOG_ENABLED;
cfs_timer_arm(&lcw->lcw_timer, cfs_time_current() +
cfs_time_seconds(timeout));
EXIT;
}