diff options
Diffstat (limited to 'net/rds/recv.c')
| -rw-r--r-- | net/rds/recv.c | 19 | 
1 files changed, 16 insertions, 3 deletions
diff --git a/net/rds/recv.c b/net/rds/recv.c index 727639dac8a7..853de4876088 100644 --- a/net/rds/recv.c +++ b/net/rds/recv.c @@ -549,9 +549,21 @@ static int rds_cmsg_recv(struct rds_incoming *inc, struct msghdr *msg,  	if ((inc->i_rx_tstamp != 0) &&  	    sock_flag(rds_rs_to_sk(rs), SOCK_RCVTSTAMP)) { -		struct timeval tv = ktime_to_timeval(inc->i_rx_tstamp); -		ret = put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, -			       sizeof(tv), &tv); +		struct __kernel_old_timeval tv = ns_to_kernel_old_timeval(inc->i_rx_tstamp); + +		if (!sock_flag(rds_rs_to_sk(rs), SOCK_TSTAMP_NEW)) { +			ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD, +				       sizeof(tv), &tv); +		} else { +			struct __kernel_sock_timeval sk_tv; + +			sk_tv.tv_sec = tv.tv_sec; +			sk_tv.tv_usec = tv.tv_usec; + +			ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_NEW, +				       sizeof(sk_tv), &sk_tv); +		} +  		if (ret)  			goto out;  	} @@ -770,6 +782,7 @@ void rds_inc_info_copy(struct rds_incoming *inc,  	minfo.seq = be64_to_cpu(inc->i_hdr.h_sequence);  	minfo.len = be32_to_cpu(inc->i_hdr.h_len); +	minfo.tos = inc->i_conn->c_tos;  	if (flip) {  		minfo.laddr = daddr;  |