diff options
Diffstat (limited to 'fs/ocfs2/cluster/tcp.c')
-rw-r--r-- | fs/ocfs2/cluster/tcp.c | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index eb649d23a4de..c6b90e670389 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c | |||
@@ -137,7 +137,7 @@ static int o2net_sys_err_translations[O2NET_ERR_MAX] = | |||
137 | static void o2net_sc_connect_completed(struct work_struct *work); | 137 | static void o2net_sc_connect_completed(struct work_struct *work); |
138 | static void o2net_rx_until_empty(struct work_struct *work); | 138 | static void o2net_rx_until_empty(struct work_struct *work); |
139 | static void o2net_shutdown_sc(struct work_struct *work); | 139 | static void o2net_shutdown_sc(struct work_struct *work); |
140 | static void o2net_listen_data_ready(struct sock *sk, int bytes); | 140 | static void o2net_listen_data_ready(struct sock *sk); |
141 | static void o2net_sc_send_keep_req(struct work_struct *work); | 141 | static void o2net_sc_send_keep_req(struct work_struct *work); |
142 | static void o2net_idle_timer(unsigned long data); | 142 | static void o2net_idle_timer(unsigned long data); |
143 | static void o2net_sc_postpone_idle(struct o2net_sock_container *sc); | 143 | static void o2net_sc_postpone_idle(struct o2net_sock_container *sc); |
@@ -597,9 +597,9 @@ static void o2net_set_nn_state(struct o2net_node *nn, | |||
597 | } | 597 | } |
598 | 598 | ||
599 | /* see o2net_register_callbacks() */ | 599 | /* see o2net_register_callbacks() */ |
600 | static void o2net_data_ready(struct sock *sk, int bytes) | 600 | static void o2net_data_ready(struct sock *sk) |
601 | { | 601 | { |
602 | void (*ready)(struct sock *sk, int bytes); | 602 | void (*ready)(struct sock *sk); |
603 | 603 | ||
604 | read_lock(&sk->sk_callback_lock); | 604 | read_lock(&sk->sk_callback_lock); |
605 | if (sk->sk_user_data) { | 605 | if (sk->sk_user_data) { |
@@ -613,7 +613,7 @@ static void o2net_data_ready(struct sock *sk, int bytes) | |||
613 | } | 613 | } |
614 | read_unlock(&sk->sk_callback_lock); | 614 | read_unlock(&sk->sk_callback_lock); |
615 | 615 | ||
616 | ready(sk, bytes); | 616 | ready(sk); |
617 | } | 617 | } |
618 | 618 | ||
619 | /* see o2net_register_callbacks() */ | 619 | /* see o2net_register_callbacks() */ |
@@ -916,57 +916,30 @@ static struct o2net_msg_handler *o2net_handler_get(u32 msg_type, u32 key) | |||
916 | 916 | ||
917 | static int o2net_recv_tcp_msg(struct socket *sock, void *data, size_t len) | 917 | static int o2net_recv_tcp_msg(struct socket *sock, void *data, size_t len) |
918 | { | 918 | { |
919 | int ret; | 919 | struct kvec vec = { .iov_len = len, .iov_base = data, }; |
920 | mm_segment_t oldfs; | 920 | struct msghdr msg = { .msg_flags = MSG_DONTWAIT, }; |
921 | struct kvec vec = { | 921 | return kernel_recvmsg(sock, &msg, &vec, 1, len, msg.msg_flags); |
922 | .iov_len = len, | ||
923 | .iov_base = data, | ||
924 | }; | ||
925 | struct msghdr msg = { | ||
926 | .msg_iovlen = 1, | ||
927 | .msg_iov = (struct iovec *)&vec, | ||
928 | .msg_flags = MSG_DONTWAIT, | ||
929 | }; | ||
930 | |||
931 | oldfs = get_fs(); | ||
932 | set_fs(get_ds()); | ||
933 | ret = sock_recvmsg(sock, &msg, len, msg.msg_flags); | ||
934 | set_fs(oldfs); | ||
935 | |||
936 | return ret; | ||
937 | } | 922 | } |
938 | 923 | ||
939 | static int o2net_send_tcp_msg(struct socket *sock, struct kvec *vec, | 924 | static int o2net_send_tcp_msg(struct socket *sock, struct kvec *vec, |
940 | size_t veclen, size_t total) | 925 | size_t veclen, size_t total) |
941 | { | 926 | { |
942 | int ret; | 927 | int ret; |
943 | mm_segment_t oldfs; | 928 | struct msghdr msg; |
944 | struct msghdr msg = { | ||
945 | .msg_iov = (struct iovec *)vec, | ||
946 | .msg_iovlen = veclen, | ||
947 | }; | ||
948 | 929 | ||
949 | if (sock == NULL) { | 930 | if (sock == NULL) { |
950 | ret = -EINVAL; | 931 | ret = -EINVAL; |
951 | goto out; | 932 | goto out; |
952 | } | 933 | } |
953 | 934 | ||
954 | oldfs = get_fs(); | 935 | ret = kernel_sendmsg(sock, &msg, vec, veclen, total); |
955 | set_fs(get_ds()); | 936 | if (likely(ret == total)) |
956 | ret = sock_sendmsg(sock, &msg, total); | 937 | return 0; |
957 | set_fs(oldfs); | 938 | mlog(ML_ERROR, "sendmsg returned %d instead of %zu\n", ret, total); |
958 | if (ret != total) { | 939 | if (ret >= 0) |
959 | mlog(ML_ERROR, "sendmsg returned %d instead of %zu\n", ret, | 940 | ret = -EPIPE; /* should be smarter, I bet */ |
960 | total); | ||
961 | if (ret >= 0) | ||
962 | ret = -EPIPE; /* should be smarter, I bet */ | ||
963 | goto out; | ||
964 | } | ||
965 | |||
966 | ret = 0; | ||
967 | out: | 941 | out: |
968 | if (ret < 0) | 942 | mlog(0, "returning error: %d\n", ret); |
969 | mlog(0, "returning error: %d\n", ret); | ||
970 | return ret; | 943 | return ret; |
971 | } | 944 | } |
972 | 945 | ||
@@ -1953,9 +1926,9 @@ static void o2net_accept_many(struct work_struct *work) | |||
1953 | cond_resched(); | 1926 | cond_resched(); |
1954 | } | 1927 | } |
1955 | 1928 | ||
1956 | static void o2net_listen_data_ready(struct sock *sk, int bytes) | 1929 | static void o2net_listen_data_ready(struct sock *sk) |
1957 | { | 1930 | { |
1958 | void (*ready)(struct sock *sk, int bytes); | 1931 | void (*ready)(struct sock *sk); |
1959 | 1932 | ||
1960 | read_lock(&sk->sk_callback_lock); | 1933 | read_lock(&sk->sk_callback_lock); |
1961 | ready = sk->sk_user_data; | 1934 | ready = sk->sk_user_data; |
@@ -1978,7 +1951,6 @@ static void o2net_listen_data_ready(struct sock *sk, int bytes) | |||
1978 | */ | 1951 | */ |
1979 | 1952 | ||
1980 | if (sk->sk_state == TCP_LISTEN) { | 1953 | if (sk->sk_state == TCP_LISTEN) { |
1981 | mlog(ML_TCP, "bytes: %d\n", bytes); | ||
1982 | queue_work(o2net_wq, &o2net_listen_work); | 1954 | queue_work(o2net_wq, &o2net_listen_work); |
1983 | } else { | 1955 | } else { |
1984 | ready = NULL; | 1956 | ready = NULL; |
@@ -1987,7 +1959,7 @@ static void o2net_listen_data_ready(struct sock *sk, int bytes) | |||
1987 | out: | 1959 | out: |
1988 | read_unlock(&sk->sk_callback_lock); | 1960 | read_unlock(&sk->sk_callback_lock); |
1989 | if (ready != NULL) | 1961 | if (ready != NULL) |
1990 | ready(sk, bytes); | 1962 | ready(sk); |
1991 | } | 1963 | } |
1992 | 1964 | ||
1993 | static int o2net_open_listening_sock(__be32 addr, __be16 port) | 1965 | static int o2net_open_listening_sock(__be32 addr, __be16 port) |