.. | .. |
---|
43 | 43 | void rds_inc_init(struct rds_incoming *inc, struct rds_connection *conn, |
---|
44 | 44 | struct in6_addr *saddr) |
---|
45 | 45 | { |
---|
46 | | - int i; |
---|
47 | | - |
---|
48 | 46 | refcount_set(&inc->i_refcount, 1); |
---|
49 | 47 | INIT_LIST_HEAD(&inc->i_item); |
---|
50 | 48 | inc->i_conn = conn; |
---|
51 | 49 | inc->i_saddr = *saddr; |
---|
52 | | - inc->i_rdma_cookie = 0; |
---|
53 | | - inc->i_rx_tstamp.tv_sec = 0; |
---|
54 | | - inc->i_rx_tstamp.tv_usec = 0; |
---|
| 50 | + inc->i_usercopy.rdma_cookie = 0; |
---|
| 51 | + inc->i_usercopy.rx_tstamp = ktime_set(0, 0); |
---|
55 | 52 | |
---|
56 | | - for (i = 0; i < RDS_RX_MAX_TRACES; i++) |
---|
57 | | - inc->i_rx_lat_trace[i] = 0; |
---|
| 53 | + memset(inc->i_rx_lat_trace, 0, sizeof(inc->i_rx_lat_trace)); |
---|
58 | 54 | } |
---|
59 | 55 | EXPORT_SYMBOL_GPL(rds_inc_init); |
---|
60 | 56 | |
---|
.. | .. |
---|
66 | 62 | inc->i_conn = cp->cp_conn; |
---|
67 | 63 | inc->i_conn_path = cp; |
---|
68 | 64 | inc->i_saddr = *saddr; |
---|
69 | | - inc->i_rdma_cookie = 0; |
---|
70 | | - inc->i_rx_tstamp.tv_sec = 0; |
---|
71 | | - inc->i_rx_tstamp.tv_usec = 0; |
---|
| 65 | + inc->i_usercopy.rdma_cookie = 0; |
---|
| 66 | + inc->i_usercopy.rx_tstamp = ktime_set(0, 0); |
---|
72 | 67 | } |
---|
73 | 68 | EXPORT_SYMBOL_GPL(rds_inc_path_init); |
---|
74 | 69 | |
---|
.. | .. |
---|
191 | 186 | case RDS_EXTHDR_RDMA_DEST: |
---|
192 | 187 | /* We ignore the size for now. We could stash it |
---|
193 | 188 | * somewhere and use it for error checking. */ |
---|
194 | | - inc->i_rdma_cookie = rds_rdma_make_cookie( |
---|
| 189 | + inc->i_usercopy.rdma_cookie = rds_rdma_make_cookie( |
---|
195 | 190 | be32_to_cpu(buffer.rdma_dest.h_rdma_rkey), |
---|
196 | 191 | be32_to_cpu(buffer.rdma_dest.h_rdma_offset)); |
---|
197 | 192 | |
---|
.. | .. |
---|
385 | 380 | be32_to_cpu(inc->i_hdr.h_len), |
---|
386 | 381 | inc->i_hdr.h_dport); |
---|
387 | 382 | if (sock_flag(sk, SOCK_RCVTSTAMP)) |
---|
388 | | - do_gettimeofday(&inc->i_rx_tstamp); |
---|
| 383 | + inc->i_usercopy.rx_tstamp = ktime_get_real(); |
---|
389 | 384 | rds_inc_addref(inc); |
---|
390 | 385 | inc->i_rx_lat_trace[RDS_MSG_RX_END] = local_clock(); |
---|
391 | 386 | list_add_tail(&inc->i_item, &rs->rs_recv_queue); |
---|
.. | .. |
---|
546 | 541 | { |
---|
547 | 542 | int ret = 0; |
---|
548 | 543 | |
---|
549 | | - if (inc->i_rdma_cookie) { |
---|
| 544 | + if (inc->i_usercopy.rdma_cookie) { |
---|
550 | 545 | ret = put_cmsg(msg, SOL_RDS, RDS_CMSG_RDMA_DEST, |
---|
551 | | - sizeof(inc->i_rdma_cookie), &inc->i_rdma_cookie); |
---|
| 546 | + sizeof(inc->i_usercopy.rdma_cookie), |
---|
| 547 | + &inc->i_usercopy.rdma_cookie); |
---|
552 | 548 | if (ret) |
---|
553 | 549 | goto out; |
---|
554 | 550 | } |
---|
555 | 551 | |
---|
556 | | - if ((inc->i_rx_tstamp.tv_sec != 0) && |
---|
| 552 | + if ((inc->i_usercopy.rx_tstamp != 0) && |
---|
557 | 553 | sock_flag(rds_rs_to_sk(rs), SOCK_RCVTSTAMP)) { |
---|
558 | | - ret = put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, |
---|
559 | | - sizeof(struct timeval), |
---|
560 | | - &inc->i_rx_tstamp); |
---|
| 554 | + struct __kernel_old_timeval tv = |
---|
| 555 | + ns_to_kernel_old_timeval(inc->i_usercopy.rx_tstamp); |
---|
| 556 | + |
---|
| 557 | + if (!sock_flag(rds_rs_to_sk(rs), SOCK_TSTAMP_NEW)) { |
---|
| 558 | + ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD, |
---|
| 559 | + sizeof(tv), &tv); |
---|
| 560 | + } else { |
---|
| 561 | + struct __kernel_sock_timeval sk_tv; |
---|
| 562 | + |
---|
| 563 | + sk_tv.tv_sec = tv.tv_sec; |
---|
| 564 | + sk_tv.tv_usec = tv.tv_usec; |
---|
| 565 | + |
---|
| 566 | + ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_NEW, |
---|
| 567 | + sizeof(sk_tv), &sk_tv); |
---|
| 568 | + } |
---|
| 569 | + |
---|
561 | 570 | if (ret) |
---|
562 | 571 | goto out; |
---|
563 | 572 | } |
---|
.. | .. |
---|
776 | 785 | |
---|
777 | 786 | minfo.seq = be64_to_cpu(inc->i_hdr.h_sequence); |
---|
778 | 787 | minfo.len = be32_to_cpu(inc->i_hdr.h_len); |
---|
| 788 | + minfo.tos = inc->i_conn->c_tos; |
---|
779 | 789 | |
---|
780 | 790 | if (flip) { |
---|
781 | 791 | minfo.laddr = daddr; |
---|
.. | .. |
---|
804 | 814 | |
---|
805 | 815 | minfo6.seq = be64_to_cpu(inc->i_hdr.h_sequence); |
---|
806 | 816 | minfo6.len = be32_to_cpu(inc->i_hdr.h_len); |
---|
807 | | - minfo6.tos = 0; |
---|
| 817 | + minfo6.tos = inc->i_conn->c_tos; |
---|
808 | 818 | |
---|
809 | 819 | if (flip) { |
---|
810 | 820 | minfo6.laddr = *daddr; |
---|