diff options
Diffstat (limited to 'net/rds/send.c')
| -rw-r--r-- | net/rds/send.c | 22 | 
1 files changed, 11 insertions, 11 deletions
diff --git a/net/rds/send.c b/net/rds/send.c index 35b9c2e9caf..23718160d71 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -31,10 +31,13 @@   *   */  #include <linux/kernel.h> +#include <linux/moduleparam.h>  #include <linux/gfp.h>  #include <net/sock.h>  #include <linux/in.h>  #include <linux/list.h> +#include <linux/ratelimit.h> +#include <linux/export.h>  #include "rds.h" @@ -104,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 @@ -116,7 +119,7 @@ static void release_in_xmit(struct rds_connection *conn)  }  /* - * We're making the concious trade-off here to only send one message + * We're making the conscious trade-off here to only send one message   * down the connection at a time.   *   Pro:   *      - tx queueing is a simple fifo list @@ -658,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); @@ -688,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); @@ -919,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; @@ -932,7 +935,6 @@ int rds_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,  	/* Mirror Linux UDP mirror of BSD error message compatibility */  	/* XXX: Perhaps MSG_MORE someday */  	if (msg->msg_flags & ~(MSG_DONTWAIT | MSG_CMSG_COMPAT)) { -		printk(KERN_INFO "msg_flags 0x%08X\n", msg->msg_flags);  		ret = -EOPNOTSUPP;  		goto out;  	} @@ -1006,16 +1008,14 @@ int rds_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,  		goto out;  	if (rm->rdma.op_active && !conn->c_trans->xmit_rdma) { -		if (printk_ratelimit()) -			printk(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n", +		printk_ratelimited(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n",  			       &rm->rdma, conn->c_trans->xmit_rdma);  		ret = -EOPNOTSUPP;  		goto out;  	}  	if (rm->atomic.op_active && !conn->c_trans->xmit_atomic) { -		if (printk_ratelimit()) -			printk(KERN_NOTICE "atomic_op %p conn xmit_atomic %p\n", +		printk_ratelimited(KERN_NOTICE "atomic_op %p conn xmit_atomic %p\n",  			       &rm->atomic, conn->c_trans->xmit_atomic);  		ret = -EOPNOTSUPP;  		goto out; @@ -1122,7 +1122,7 @@ rds_send_pong(struct rds_connection *conn, __be16 dport)  	rds_stats_inc(s_send_pong);  	if (!test_bit(RDS_LL_SEND_FULL, &conn->c_flags)) -		rds_send_xmit(conn); +		queue_delayed_work(rds_wq, &conn->c_send_w, 0);  	rds_message_put(rm);  	return 0;  | 
