diff options
Diffstat (limited to 'net/rds')
| -rw-r--r-- | net/rds/bind.c | 2 | ||||
| -rw-r--r-- | net/rds/connection.c | 12 | ||||
| -rw-r--r-- | net/rds/ib.c | 3 | ||||
| -rw-r--r-- | net/rds/ib_recv.c | 11 | ||||
| -rw-r--r-- | net/rds/ib_send.c | 9 | ||||
| -rw-r--r-- | net/rds/iw.c | 3 | ||||
| -rw-r--r-- | net/rds/iw_recv.c | 4 | ||||
| -rw-r--r-- | net/rds/iw_send.c | 4 | ||||
| -rw-r--r-- | net/rds/iw_sysctl.c | 3 | ||||
| -rw-r--r-- | net/rds/rdma_transport.c | 2 | ||||
| -rw-r--r-- | net/rds/rds.h | 2 | ||||
| -rw-r--r-- | net/rds/recv.c | 5 | ||||
| -rw-r--r-- | net/rds/send.c | 8 | ||||
| -rw-r--r-- | net/rds/sysctl.c | 3 | ||||
| -rw-r--r-- | net/rds/tcp.h | 4 | ||||
| -rw-r--r-- | net/rds/tcp_listen.c | 8 | ||||
| -rw-r--r-- | net/rds/tcp_recv.c | 8 | ||||
| -rw-r--r-- | net/rds/tcp_send.c | 2 | 
18 files changed, 47 insertions, 46 deletions
diff --git a/net/rds/bind.c b/net/rds/bind.c index b5ad65a0067..a2e6562da75 100644 --- a/net/rds/bind.c +++ b/net/rds/bind.c @@ -117,7 +117,7 @@ static int rds_add_bound(struct rds_sock *rs, __be32 addr, __be16 *port)  		rover = be16_to_cpu(*port);  		last = rover;  	} else { -		rover = max_t(u16, net_random(), 2); +		rover = max_t(u16, prandom_u32(), 2);  		last = rover - 1;  	} diff --git a/net/rds/connection.c b/net/rds/connection.c index 642ad42c416..378c3a6acf8 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -51,10 +51,16 @@ static struct kmem_cache *rds_conn_slab;  static struct hlist_head *rds_conn_bucket(__be32 laddr, __be32 faddr)  { +	static u32 rds_hash_secret __read_mostly; + +	unsigned long hash; + +	net_get_random_once(&rds_hash_secret, sizeof(rds_hash_secret)); +  	/* Pass NULL, don't need struct net for hash */ -	unsigned long hash = inet_ehashfn(NULL, -					  be32_to_cpu(laddr), 0, -					  be32_to_cpu(faddr), 0); +	hash = __inet_ehashfn(be32_to_cpu(laddr), 0, +			      be32_to_cpu(faddr), 0, +			      rds_hash_secret);  	return &rds_conn_hash[hash & RDS_CONNECTION_HASH_MASK];  } diff --git a/net/rds/ib.c b/net/rds/ib.c index b4c8b0022fe..ba2dffeff60 100644 --- a/net/rds/ib.c +++ b/net/rds/ib.c @@ -338,7 +338,8 @@ static int rds_ib_laddr_check(__be32 addr)  	ret = rdma_bind_addr(cm_id, (struct sockaddr *)&sin);  	/* due to this, we will claim to support iWARP devices unless we  	   check node_type. */ -	if (ret || cm_id->device->node_type != RDMA_NODE_IB_CA) +	if (ret || !cm_id->device || +	    cm_id->device->node_type != RDMA_NODE_IB_CA)  		ret = -EADDRNOTAVAIL;  	rdsdebug("addr %pI4 ret %d node type %d\n", diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c index 8eb9501e3d6..d67de453c35 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c @@ -421,8 +421,7 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,  				 struct rds_ib_refill_cache *cache)  {  	unsigned long flags; -	struct list_head *old; -	struct list_head __percpu *chpfirst; +	struct list_head *old, *chpfirst;  	local_irq_save(flags); @@ -432,7 +431,7 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,  	else /* put on front */  		list_add_tail(new_item, chpfirst); -	__this_cpu_write(chpfirst, new_item); +	__this_cpu_write(cache->percpu->first, new_item);  	__this_cpu_inc(cache->percpu->count);  	if (__this_cpu_read(cache->percpu->count) < RDS_IB_RECYCLE_BATCH_COUNT) @@ -452,7 +451,7 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,  	} while (old); -	__this_cpu_write(chpfirst, NULL); +	__this_cpu_write(cache->percpu->first, NULL);  	__this_cpu_write(cache->percpu->count, 0);  end:  	local_irq_restore(flags); @@ -599,7 +598,7 @@ static void rds_ib_set_ack(struct rds_ib_connection *ic, u64 seq,  {  	atomic64_set(&ic->i_ack_next, seq);  	if (ack_required) { -		smp_mb__before_clear_bit(); +		smp_mb__before_atomic();  		set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);  	}  } @@ -607,7 +606,7 @@ static void rds_ib_set_ack(struct rds_ib_connection *ic, u64 seq,  static u64 rds_ib_get_ack(struct rds_ib_connection *ic)  {  	clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); -	smp_mb__after_clear_bit(); +	smp_mb__after_atomic();  	return atomic64_read(&ic->i_ack_next);  } diff --git a/net/rds/ib_send.c b/net/rds/ib_send.c index e5909498117..1dde91e3dc7 100644 --- a/net/rds/ib_send.c +++ b/net/rds/ib_send.c @@ -298,7 +298,7 @@ void rds_ib_send_cq_comp_handler(struct ib_cq *cq, void *context)  		rds_ib_stats_inc(s_ib_tx_cq_event);  		if (wc.wr_id == RDS_IB_ACK_WR_ID) { -			if (ic->i_ack_queued + HZ/2 < jiffies) +			if (time_after(jiffies, ic->i_ack_queued + HZ/2))  				rds_ib_stats_inc(s_ib_tx_stalled);  			rds_ib_ack_send_complete(ic);  			continue; @@ -315,7 +315,7 @@ void rds_ib_send_cq_comp_handler(struct ib_cq *cq, void *context)  			rm = rds_ib_send_unmap_op(ic, send, wc.status); -			if (send->s_queued + HZ/2 < jiffies) +			if (time_after(jiffies, send->s_queued + HZ/2))  				rds_ib_stats_inc(s_ib_tx_stalled);  			if (send->s_op) { @@ -552,9 +552,8 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,  	    && rm->m_inc.i_hdr.h_flags & RDS_FLAG_CONG_BITMAP) {  		rds_cong_map_updated(conn->c_fcong, ~(u64) 0);  		scat = &rm->data.op_sg[sg]; -		ret = sizeof(struct rds_header) + RDS_CONG_MAP_BYTES; -		ret = min_t(int, ret, scat->length - conn->c_xmit_data_off); -		return ret; +		ret = max_t(int, RDS_CONG_MAP_BYTES, scat->length); +		return sizeof(struct rds_header) + ret;  	}  	/* FIXME we may overallocate here */ diff --git a/net/rds/iw.c b/net/rds/iw.c index 7826d46baa7..589935661d6 100644 --- a/net/rds/iw.c +++ b/net/rds/iw.c @@ -239,7 +239,8 @@ static int rds_iw_laddr_check(__be32 addr)  	ret = rdma_bind_addr(cm_id, (struct sockaddr *)&sin);  	/* due to this, we will claim to support IB devices unless we  	   check node_type. */ -	if (ret || cm_id->device->node_type != RDMA_NODE_RNIC) +	if (ret || !cm_id->device || +	    cm_id->device->node_type != RDMA_NODE_RNIC)  		ret = -EADDRNOTAVAIL;  	rdsdebug("addr %pI4 ret %d node type %d\n", diff --git a/net/rds/iw_recv.c b/net/rds/iw_recv.c index 45033358358..aa8bf678600 100644 --- a/net/rds/iw_recv.c +++ b/net/rds/iw_recv.c @@ -429,7 +429,7 @@ static void rds_iw_set_ack(struct rds_iw_connection *ic, u64 seq,  {  	atomic64_set(&ic->i_ack_next, seq);  	if (ack_required) { -		smp_mb__before_clear_bit(); +		smp_mb__before_atomic();  		set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);  	}  } @@ -437,7 +437,7 @@ static void rds_iw_set_ack(struct rds_iw_connection *ic, u64 seq,  static u64 rds_iw_get_ack(struct rds_iw_connection *ic)  {  	clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); -	smp_mb__after_clear_bit(); +	smp_mb__after_atomic();  	return atomic64_read(&ic->i_ack_next);  } diff --git a/net/rds/iw_send.c b/net/rds/iw_send.c index e40c3c5db2c..9105ea03aec 100644 --- a/net/rds/iw_send.c +++ b/net/rds/iw_send.c @@ -232,7 +232,7 @@ void rds_iw_send_cq_comp_handler(struct ib_cq *cq, void *context)  		}  		if (wc.wr_id == RDS_IW_ACK_WR_ID) { -			if (ic->i_ack_queued + HZ/2 < jiffies) +			if (time_after(jiffies, ic->i_ack_queued + HZ/2))  				rds_iw_stats_inc(s_iw_tx_stalled);  			rds_iw_ack_send_complete(ic);  			continue; @@ -267,7 +267,7 @@ void rds_iw_send_cq_comp_handler(struct ib_cq *cq, void *context)  			send->s_wr.opcode = 0xdead;  			send->s_wr.num_sge = 1; -			if (send->s_queued + HZ/2 < jiffies) +			if (time_after(jiffies, send->s_queued + HZ/2))  				rds_iw_stats_inc(s_iw_tx_stalled);  			/* If a RDMA operation produced an error, signal this right diff --git a/net/rds/iw_sysctl.c b/net/rds/iw_sysctl.c index 89c91515ed0..139239d2cb2 100644 --- a/net/rds/iw_sysctl.c +++ b/net/rds/iw_sysctl.c @@ -111,8 +111,7 @@ static struct ctl_table rds_iw_sysctl_table[] = {  void rds_iw_sysctl_exit(void)  { -	if (rds_iw_sysctl_hdr) -		unregister_net_sysctl_table(rds_iw_sysctl_hdr); +	unregister_net_sysctl_table(rds_iw_sysctl_hdr);  }  int rds_iw_sysctl_init(void) diff --git a/net/rds/rdma_transport.c b/net/rds/rdma_transport.c index c2be901d19e..6cd9d1deafc 100644 --- a/net/rds/rdma_transport.c +++ b/net/rds/rdma_transport.c @@ -168,7 +168,7 @@ static int rds_rdma_listen_init(void)  		return ret;  	} -	sin.sin_family = AF_INET, +	sin.sin_family = AF_INET;  	sin.sin_addr.s_addr = (__force u32)htonl(INADDR_ANY);  	sin.sin_port = (__force u16)htons(RDS_PORT); diff --git a/net/rds/rds.h b/net/rds/rds.h index ec1d731ecff..48f8ffc60f8 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -749,7 +749,7 @@ void rds_atomic_send_complete(struct rds_message *rm, int wc_status);  int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm,  		    struct cmsghdr *cmsg); -extern void __rds_put_mr_final(struct rds_mr *mr); +void __rds_put_mr_final(struct rds_mr *mr);  static inline void rds_mr_put(struct rds_mr *mr)  {  	if (atomic_dec_and_test(&mr->r_refcount)) diff --git a/net/rds/recv.c b/net/rds/recv.c index 9f0f17cf6bf..bd82522534f 100644 --- a/net/rds/recv.c +++ b/net/rds/recv.c @@ -402,7 +402,7 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,  	struct rds_sock *rs = rds_sk_to_rs(sk);  	long timeo;  	int ret = 0, nonblock = msg_flags & MSG_DONTWAIT; -	struct sockaddr_in *sin; +	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);  	struct rds_incoming *inc = NULL;  	/* udp_recvmsg()->sock_recvtimeo() gets away without locking too.. */ @@ -410,8 +410,6 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,  	rdsdebug("size %zu flags 0x%x timeo %ld\n", size, msg_flags, timeo); -	msg->msg_namelen = 0; -  	if (msg_flags & MSG_OOB)  		goto out; @@ -481,7 +479,6 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,  		rds_stats_inc(s_recv_delivered); -		sin = (struct sockaddr_in *)msg->msg_name;  		if (sin) {  			sin->sin_family = AF_INET;  			sin->sin_port = inc->i_hdr.h_sport; diff --git a/net/rds/send.c b/net/rds/send.c index 88eace57dd6..23718160d71 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -107,7 +107,7 @@ static int acquire_in_xmit(struct rds_connection *conn)  static void release_in_xmit(struct rds_connection *conn)  {  	clear_bit(RDS_IN_XMIT, &conn->c_flags); -	smp_mb__after_clear_bit(); +	smp_mb__after_atomic();  	/*  	 * We don't use wait_on_bit()/wake_up_bit() because our waking is in a  	 * hot path and finding waiters is very rare.  We don't want to walk @@ -661,7 +661,7 @@ void rds_send_drop_acked(struct rds_connection *conn, u64 ack,  	/* order flag updates with spin locks */  	if (!list_empty(&list)) -		smp_mb__after_clear_bit(); +		smp_mb__after_atomic();  	spin_unlock_irqrestore(&conn->c_lock, flags); @@ -691,7 +691,7 @@ void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in *dest)  	}  	/* order flag updates with the rs lock */ -	smp_mb__after_clear_bit(); +	smp_mb__after_atomic();  	spin_unlock_irqrestore(&rs->rs_lock, flags); @@ -922,7 +922,7 @@ int rds_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,  {  	struct sock *sk = sock->sk;  	struct rds_sock *rs = rds_sk_to_rs(sk); -	struct sockaddr_in *usin = (struct sockaddr_in *)msg->msg_name; +	DECLARE_SOCKADDR(struct sockaddr_in *, usin, msg->msg_name);  	__be32 daddr;  	__be16 dport;  	struct rds_message *rm = NULL; diff --git a/net/rds/sysctl.c b/net/rds/sysctl.c index b5cb2aa08f3..c3b0cd43eb5 100644 --- a/net/rds/sysctl.c +++ b/net/rds/sysctl.c @@ -94,8 +94,7 @@ static struct ctl_table rds_sysctl_rds_table[] = {  void rds_sysctl_exit(void)  { -	if (rds_sysctl_reg_table) -		unregister_net_sysctl_table(rds_sysctl_reg_table); +	unregister_net_sysctl_table(rds_sysctl_reg_table);  }  int rds_sysctl_init(void) diff --git a/net/rds/tcp.h b/net/rds/tcp.h index 9cf2927d002..65637491f72 100644 --- a/net/rds/tcp.h +++ b/net/rds/tcp.h @@ -61,12 +61,12 @@ void rds_tcp_state_change(struct sock *sk);  /* tcp_listen.c */  int rds_tcp_listen_init(void);  void rds_tcp_listen_stop(void); -void rds_tcp_listen_data_ready(struct sock *sk, int bytes); +void rds_tcp_listen_data_ready(struct sock *sk);  /* tcp_recv.c */  int rds_tcp_recv_init(void);  void rds_tcp_recv_exit(void); -void rds_tcp_data_ready(struct sock *sk, int bytes); +void rds_tcp_data_ready(struct sock *sk);  int rds_tcp_recv(struct rds_connection *conn);  void rds_tcp_inc_free(struct rds_incoming *inc);  int rds_tcp_inc_copy_to_user(struct rds_incoming *inc, struct iovec *iov, diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c index 7787537e9c2..23ab4dcd1d9 100644 --- a/net/rds/tcp_listen.c +++ b/net/rds/tcp_listen.c @@ -108,9 +108,9 @@ static void rds_tcp_accept_worker(struct work_struct *work)  		cond_resched();  } -void rds_tcp_listen_data_ready(struct sock *sk, int bytes) +void rds_tcp_listen_data_ready(struct sock *sk)  { -	void (*ready)(struct sock *sk, int bytes); +	void (*ready)(struct sock *sk);  	rdsdebug("listen data ready sk %p\n", sk); @@ -132,7 +132,7 @@ void rds_tcp_listen_data_ready(struct sock *sk, int bytes)  out:  	read_unlock(&sk->sk_callback_lock); -	ready(sk, bytes); +	ready(sk);  }  int rds_tcp_listen_init(void) @@ -153,7 +153,7 @@ int rds_tcp_listen_init(void)  	sock->sk->sk_data_ready = rds_tcp_listen_data_ready;  	write_unlock_bh(&sock->sk->sk_callback_lock); -	sin.sin_family = PF_INET, +	sin.sin_family = PF_INET;  	sin.sin_addr.s_addr = (__force u32)htonl(INADDR_ANY);  	sin.sin_port = (__force u16)htons(RDS_TCP_PORT); diff --git a/net/rds/tcp_recv.c b/net/rds/tcp_recv.c index 4fac4f2bb9d..9ae6e0a264e 100644 --- a/net/rds/tcp_recv.c +++ b/net/rds/tcp_recv.c @@ -314,13 +314,13 @@ int rds_tcp_recv(struct rds_connection *conn)  	return ret;  } -void rds_tcp_data_ready(struct sock *sk, int bytes) +void rds_tcp_data_ready(struct sock *sk)  { -	void (*ready)(struct sock *sk, int bytes); +	void (*ready)(struct sock *sk);  	struct rds_connection *conn;  	struct rds_tcp_connection *tc; -	rdsdebug("data ready sk %p bytes %d\n", sk, bytes); +	rdsdebug("data ready sk %p\n", sk);  	read_lock(&sk->sk_callback_lock);  	conn = sk->sk_user_data; @@ -337,7 +337,7 @@ void rds_tcp_data_ready(struct sock *sk, int bytes)  		queue_delayed_work(rds_wq, &conn->c_recv_w, 0);  out:  	read_unlock(&sk->sk_callback_lock); -	ready(sk, bytes); +	ready(sk);  }  int rds_tcp_recv_init(void) diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c index 81cf5a4c5e4..53b17ca0dff 100644 --- a/net/rds/tcp_send.c +++ b/net/rds/tcp_send.c @@ -93,7 +93,7 @@ int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm,  		rm->m_ack_seq = tc->t_last_sent_nxt +  				sizeof(struct rds_header) +  				be32_to_cpu(rm->m_inc.i_hdr.h_len) - 1; -		smp_mb__before_clear_bit(); +		smp_mb__before_atomic();  		set_bit(RDS_MSG_HAS_ACK_SEQ, &rm->m_flags);  		tc->t_last_expected_una = rm->m_ack_seq + 1;  | 
