X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=net%2Fsunrpc%2Fxprtsock.c;fp=net%2Fsunrpc%2Fxprtsock.c;h=c458f8d1d6d1090e193c1c1cd66a4c7552c92986;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=9e300a3279c23a4c24ae8e31409fca8c33ed6a9f;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 9e300a327..c458f8d1d 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -382,7 +382,6 @@ static int xs_tcp_send_request(struct rpc_task *task) /* If we've sent the entire packet, immediately * reset the count of bytes sent. */ req->rq_bytes_sent += status; - task->tk_bytes_sent += status; if (likely(req->rq_bytes_sent >= req->rq_slen)) { req->rq_bytes_sent = 0; return 0; @@ -413,33 +412,6 @@ static int xs_tcp_send_request(struct rpc_task *task) return status; } -/** - * xs_tcp_release_xprt - clean up after a tcp transmission - * @xprt: transport - * @task: rpc task - * - * This cleans up if an error causes us to abort the transmission of a request. - * In this case, the socket may need to be reset in order to avoid confusing - * the server. - */ -static void xs_tcp_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task) -{ - struct rpc_rqst *req; - - if (task != xprt->snd_task) - return; - if (task == NULL) - goto out_release; - req = task->tk_rqstp; - if (req->rq_bytes_sent == 0) - goto out_release; - if (req->rq_bytes_sent == req->rq_snd_buf.len) - goto out_release; - set_bit(XPRT_CLOSE_WAIT, &task->tk_xprt->state); -out_release: - xprt_release_xprt(xprt, task); -} - /** * xs_close - close a socket * @xprt: transport @@ -957,13 +929,6 @@ static void xs_udp_timer(struct rpc_task *task) xprt_adjust_cwnd(task, -ETIMEDOUT); } -static unsigned short xs_get_random_port(void) -{ - unsigned short range = xprt_max_resvport - xprt_min_resvport; - unsigned short rand = (unsigned short) net_random() % range; - return rand + xprt_min_resvport; -} - /** * xs_set_port - reset the port number in the remote endpoint address * @xprt: generic transport @@ -1004,37 +969,6 @@ static int xs_bindresvport(struct rpc_xprt *xprt, struct socket *sock) return err; } -#ifdef CONFIG_DEBUG_LOCK_ALLOC -static struct lock_class_key xs_key[2]; -static struct lock_class_key xs_slock_key[2]; - -static inline void xs_reclassify_socket(struct socket *sock) -{ - struct sock *sk = sock->sk; - BUG_ON(sk->sk_lock.owner != NULL); - switch (sk->sk_family) { - case AF_INET: - sock_lock_init_class_and_name(sk, - "slock-AF_INET-NFS", &xs_slock_key[0], - "sk_lock-AF_INET-NFS", &xs_key[0]); - break; - - case AF_INET6: - sock_lock_init_class_and_name(sk, - "slock-AF_INET6-NFS", &xs_slock_key[1], - "sk_lock-AF_INET6-NFS", &xs_key[1]); - break; - - default: - BUG(); - } -} -#else -static inline void xs_reclassify_socket(struct socket *sock) -{ -} -#endif - /** * xs_udp_connect_worker - set up a UDP socket * @args: RPC transport to connect @@ -1059,7 +993,6 @@ static void xs_udp_connect_worker(void *args) dprintk("RPC: can't create UDP transport socket (%d).\n", -err); goto out; } - xs_reclassify_socket(sock); if (xprt->resvport && xs_bindresvport(xprt, sock) < 0) { sock_release(sock); @@ -1142,7 +1075,6 @@ static void xs_tcp_connect_worker(void *args) dprintk("RPC: can't create TCP transport socket (%d).\n", -err); goto out; } - xs_reclassify_socket(sock); if (xprt->resvport && xs_bindresvport(xprt, sock) < 0) { sock_release(sock); @@ -1182,8 +1114,6 @@ static void xs_tcp_connect_worker(void *args) } /* Tell the socket layer to start connecting... */ - xprt->stat.connect_count++; - xprt->stat.connect_start = jiffies; status = sock->ops->connect(sock, (struct sockaddr *) &xprt->addr, sizeof(xprt->addr), O_NONBLOCK); dprintk("RPC: %p connect status %d connected %d sock state %d\n", @@ -1247,50 +1177,6 @@ static void xs_connect(struct rpc_task *task) } } -/** - * xs_udp_print_stats - display UDP socket-specifc stats - * @xprt: rpc_xprt struct containing statistics - * @seq: output file - * - */ -static void xs_udp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) -{ - seq_printf(seq, "\txprt:\tudp %u %lu %lu %lu %lu %Lu %Lu\n", - xprt->port, - xprt->stat.bind_count, - xprt->stat.sends, - xprt->stat.recvs, - xprt->stat.bad_xids, - xprt->stat.req_u, - xprt->stat.bklog_u); -} - -/** - * xs_tcp_print_stats - display TCP socket-specifc stats - * @xprt: rpc_xprt struct containing statistics - * @seq: output file - * - */ -static void xs_tcp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) -{ - long idle_time = 0; - - if (xprt_connected(xprt)) - idle_time = (long)(jiffies - xprt->last_used) / HZ; - - seq_printf(seq, "\txprt:\ttcp %u %lu %lu %lu %ld %lu %lu %lu %Lu %Lu\n", - xprt->port, - xprt->stat.bind_count, - xprt->stat.connect_count, - xprt->stat.connect_time, - idle_time, - xprt->stat.sends, - xprt->stat.recvs, - xprt->stat.bad_xids, - xprt->stat.req_u, - xprt->stat.bklog_u); -} - static struct rpc_xprt_ops xs_udp_ops = { .set_buffer_size = xs_udp_set_buffer_size, .reserve_xprt = xprt_reserve_xprt_cong, @@ -1305,12 +1191,11 @@ static struct rpc_xprt_ops xs_udp_ops = { .release_request = xprt_release_rqst_cong, .close = xs_close, .destroy = xs_destroy, - .print_stats = xs_udp_print_stats, }; static struct rpc_xprt_ops xs_tcp_ops = { .reserve_xprt = xprt_reserve_xprt, - .release_xprt = xs_tcp_release_xprt, + .release_xprt = xprt_release_xprt, .set_port = xs_set_port, .connect = xs_connect, .buf_alloc = rpc_malloc, @@ -1319,7 +1204,6 @@ static struct rpc_xprt_ops xs_tcp_ops = { .set_retrans_timeout = xprt_set_retrans_timeout_def, .close = xs_close, .destroy = xs_destroy, - .print_stats = xs_tcp_print_stats, }; /** @@ -1336,12 +1220,13 @@ int xs_setup_udp(struct rpc_xprt *xprt, struct rpc_timeout *to) xprt->max_reqs = xprt_udp_slot_table_entries; slot_table_size = xprt->max_reqs * sizeof(xprt->slot[0]); - xprt->slot = kzalloc(slot_table_size, GFP_KERNEL); + xprt->slot = kmalloc(slot_table_size, GFP_KERNEL); if (xprt->slot == NULL) return -ENOMEM; + memset(xprt->slot, 0, slot_table_size); xprt->prot = IPPROTO_UDP; - xprt->port = xs_get_random_port(); + xprt->port = xprt_max_resvport; xprt->tsh_size = 0; xprt->resvport = capable(CAP_NET_BIND_SERVICE) ? 1 : 0; /* XXX: header size can vary due to auth type, IPv6, etc. */ @@ -1377,12 +1262,13 @@ int xs_setup_tcp(struct rpc_xprt *xprt, struct rpc_timeout *to) xprt->max_reqs = xprt_tcp_slot_table_entries; slot_table_size = xprt->max_reqs * sizeof(xprt->slot[0]); - xprt->slot = kzalloc(slot_table_size, GFP_KERNEL); + xprt->slot = kmalloc(slot_table_size, GFP_KERNEL); if (xprt->slot == NULL) return -ENOMEM; + memset(xprt->slot, 0, slot_table_size); xprt->prot = IPPROTO_TCP; - xprt->port = xs_get_random_port(); + xprt->port = xprt_max_resvport; xprt->tsh_size = sizeof(rpc_fraghdr) / sizeof(u32); xprt->resvport = capable(CAP_NET_BIND_SERVICE) ? 1 : 0; xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;