/* not an orphan RPC */
crpc->crp_finished = 1;
- if (crpc->crp_stamp == 0) {
+ if (crpc->crp_stamp_ns == 0) {
/* not aborted */
- LASSERT (crpc->crp_status == 0);
+ LASSERT(crpc->crp_status == 0);
- crpc->crp_stamp = cfs_time_current();
+ crpc->crp_stamp_ns = ktime_get_ns();
crpc->crp_status = rpc->crpc_status;
}
int bulk_npg, int bulk_len, int embedded,
struct lstcon_rpc *crpc)
{
+ memset(crpc, 0, sizeof(*crpc));
+
crpc->crp_rpc = sfw_create_rpc(nd->nd_id, service,
feats, bulk_npg, bulk_len,
lstcon_rpc_done, (void *)crpc);
if (crpc->crp_rpc == NULL)
return -ENOMEM;
- crpc->crp_trans = NULL;
crpc->crp_node = nd;
- crpc->crp_posted = 0;
- crpc->crp_finished = 0;
- crpc->crp_unpacked = 0;
- crpc->crp_status = 0;
- crpc->crp_stamp = 0;
crpc->crp_embedded = embedded;
INIT_LIST_HEAD(&crpc->crp_link);
LASSERT(list_empty(&crpc->crp_link));
for (i = 0; i < bulk->bk_niov; i++) {
- if (bulk->bk_iovs[i].kiov_page == NULL)
+ if (bulk->bk_iovs[i].bv_page == NULL)
continue;
- __free_page(bulk->bk_iovs[i].kiov_page);
+ __free_page(bulk->bk_iovs[i].bv_page);
}
srpc_client_rpc_decref(crpc->crp_rpc);
spin_lock(&rpc->crpc_lock);
if (!crpc->crp_posted || /* not posted */
- crpc->crp_stamp != 0) { /* rpc done or aborted already */
- if (crpc->crp_stamp == 0) {
- crpc->crp_stamp = cfs_time_current();
+ crpc->crp_stamp_ns != 0) { /* rpc done or aborted already */
+ if (crpc->crp_stamp_ns == 0) {
+ crpc->crp_stamp_ns = ktime_get_ns();
crpc->crp_status = -EINTR;
}
spin_unlock(&rpc->crpc_lock);
continue;
}
- crpc->crp_stamp = cfs_time_current();
+ crpc->crp_stamp_ns = ktime_get_ns();
crpc->crp_status = error;
spin_unlock(&rpc->crpc_lock);
continue;
nd = crpc->crp_node;
- if (cfs_time_after(nd->nd_stamp, crpc->crp_stamp))
+ if (ktime_to_ns(nd->nd_stamp) > crpc->crp_stamp_ns)
continue;
- nd->nd_stamp = crpc->crp_stamp;
+ nd->nd_stamp = ktime_set(0, crpc->crp_stamp_ns);
nd->nd_state = LST_NODE_DOWN;
}
}
struct srpc_client_rpc *rpc = crpc->crp_rpc;
struct srpc_generic_reply *rep;
- LASSERT (nd != NULL && rpc != NULL);
- LASSERT (crpc->crp_stamp != 0);
+ LASSERT(nd != NULL && rpc != NULL);
+ LASSERT(crpc->crp_stamp_ns != 0);
if (crpc->crp_status != 0) {
*msgpp = NULL;
crpc->crp_unpacked = 1;
}
- if (cfs_time_after(nd->nd_stamp, crpc->crp_stamp))
- return 0;
+ if (ktime_to_ns(nd->nd_stamp) > crpc->crp_stamp_ns)
+ return 0;
- nd->nd_stamp = crpc->crp_stamp;
- rep = &(*msgpp)->msg_body.reply;
+ nd->nd_stamp = ktime_set(0, crpc->crp_stamp_ns);
+ rep = &(*msgpp)->msg_body.reply;
if (rep->sid.ses_nid == LNET_NID_ANY)
nd->nd_state = LST_NODE_UNKNOWN;
list_for_each_entry(crpc, &trans->tas_rpcs_list, crp_link) {
lstcon_rpc_stat_total(stat, 1);
- LASSERT(crpc->crp_stamp != 0);
+ LASSERT(crpc->crp_stamp_ns != 0);
error = lstcon_rpc_get_reply(crpc, &rep);
if (error != 0) {
lstcon_rpc_stat_failure(stat, 0),
lstcon_rpc_stat_total(stat, 0),
stat->trs_rpc_errno, stat->trs_fwk_errno);
-
- return;
}
int
struct lstcon_rpc *crpc;
struct srpc_msg *msg;
struct lstcon_node *nd;
- cfs_duration_t dur;
- struct timeval tv;
+ struct timespec64 ts;
int error;
+ s64 dur;
LASSERT(head_up != NULL);
ent = list_entry(next, struct lstcon_rpc_ent, rpe_link);
- LASSERT(crpc->crp_stamp != 0);
+ LASSERT(crpc->crp_stamp_ns != 0);
- error = lstcon_rpc_get_reply(crpc, &msg);
+ error = lstcon_rpc_get_reply(crpc, &msg);
- nd = crpc->crp_node;
+ nd = crpc->crp_node;
- dur = (cfs_duration_t)cfs_time_sub(crpc->crp_stamp,
- (cfs_time_t)console_session.ses_id.ses_stamp);
- jiffies_to_timeval(dur, &tv);
+ dur = crpc->crp_stamp_ns -
+ console_session.ses_id.ses_stamp * NSEC_PER_MSEC;
+ ts = ns_to_timespec64(dur);
if (copy_to_user(&ent->rpe_peer,
&nd->nd_id, sizeof(struct lnet_process_id)) ||
- copy_to_user(&ent->rpe_stamp, &tv, sizeof(tv)) ||
+ copy_to_user(&ent->rpe_stamp, &ts, sizeof(ts)) ||
copy_to_user(&ent->rpe_state,
&nd->nd_state, sizeof(nd->nd_state)) ||
copy_to_user(&ent->rpe_rpc_errno, &error,
lstcon_rpc_trans_name(trans->tas_opc), count);
LIBCFS_FREE(trans, sizeof(*trans));
-
- return;
}
int
}
static struct lnet_process_id_packed *
-lstcon_next_id(int idx, int nkiov, lnet_kiov_t *kiov)
+lstcon_next_id(int idx, int nkiov, struct bio_vec *kiov)
{
struct lnet_process_id_packed *pid;
int i;
LASSERT (i < nkiov);
- pid = (struct lnet_process_id_packed *)page_address(kiov[i].kiov_page);
+ pid = (struct lnet_process_id_packed *)page_address(kiov[i].bv_page);
return &pid[idx % SFW_ID_PER_PAGE];
}
static int
lstcon_dstnodes_prep(struct lstcon_group *grp, int idx,
- int dist, int span, int nkiov, lnet_kiov_t *kiov)
+ int dist, int span, int nkiov, struct bio_vec *kiov)
{
struct lnet_process_id_packed *pid;
struct lstcon_ndlink *ndl;
PAGE_SIZE : min_t(int, nob, PAGE_SIZE);
nob -= len;
- bulk->bk_iovs[i].kiov_offset = 0;
- bulk->bk_iovs[i].kiov_len = len;
- bulk->bk_iovs[i].kiov_page =
+ bulk->bk_iovs[i].bv_offset = 0;
+ bulk->bk_iovs[i].bv_len = len;
+ bulk->bk_iovs[i].bv_page =
alloc_page(GFP_KERNEL);
- if (bulk->bk_iovs[i].kiov_page == NULL) {
+ if (bulk->bk_iovs[i].bv_page == NULL) {
lstcon_rpc_put(*crpc);
return -ENOMEM;
}
if (stat->trs_fwk_errno == 0)
stat->trs_fwk_errno = rc;
-
- return;
}
int
lstcon_rpc_put(crpc);
}
- if (nd->nd_state != LST_NODE_ACTIVE)
- continue;
+ if (nd->nd_state != LST_NODE_ACTIVE)
+ continue;
- intv = cfs_duration_sec(jiffies - nd->nd_stamp);
+ intv = div_u64(ktime_ms_delta(ktime_get(), nd->nd_stamp),
+ MSEC_PER_SEC);
if (intv < nd->nd_timeout / 2)
- continue;
+ continue;
rc = lstcon_rpc_init(nd, SRPC_SERVICE_DEBUG,
trans->tas_features, 0, 0, 1, crpc);
struct lstcon_rpc_trans *trans;
struct lstcon_rpc *crpc;
struct list_head *pacer;
- struct list_head zlist;
+ LIST_HEAD(zlist);
/* Called with hold of global mutex */
CWARN("Session is shutting down, "
"waiting for termination of transactions\n");
- set_current_state(TASK_UNINTERRUPTIBLE);
- schedule_timeout(cfs_time_seconds(1));
+ schedule_timeout_uninterruptible(cfs_time_seconds(1));
mutex_lock(&console_session.ses_mutex);
}
"waiting for %d console RPCs to being recycled\n",
atomic_read(&console_session.ses_rpc_counter));
- list_add(&zlist, &console_session.ses_rpc_freelist);
- list_del_init(&console_session.ses_rpc_freelist);
+ list_splice_init(&console_session.ses_rpc_freelist, &zlist);
spin_unlock(&console_session.ses_rpc_lock);