[PATCH] [LIO-Target]: Use modern kernel socket wrappers fromlinux/net/socket.c:kernel_*()

From: Nicholas A. Bellinger
Date: Tue Nov 25 2008 - 23:37:22 EST


>From 09898c433f71d32b3072ef14ff3d71ad1700d639 Mon Sep 17 00:00:00 2001
From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
Date: Tue, 25 Nov 2008 19:50:16 -0800
Subject: [PATCH] [LIO-Target]: Use modern kernel socket wrappers from linux/net/socket.c:kernel_*()

Removed legacy drivers/lio-core/iscsi_linux_def.h:iscsi_sock_*() macros,
and converted v3.0 server side kernel socket code to use kernel sockets API
in linux/net/socket.c:kernel_*(). These functions first appeared in
kernel.org in v2.6.19.

Signed-off-by: Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx>
---
drivers/lio-core/iscsi_auth_kernel.h | 5 +--
drivers/lio-core/iscsi_linux_defs.h | 23 ---------------
drivers/lio-core/iscsi_target_login.c | 51 ++++++++++++++++++++-------------
3 files changed, 33 insertions(+), 46 deletions(-)

diff --git a/drivers/lio-core/iscsi_auth_kernel.h b/drivers/lio-core/iscsi_auth_kernel.h
index 96dc7ae..cf789dd 100644
--- a/drivers/lio-core/iscsi_auth_kernel.h
+++ b/drivers/lio-core/iscsi_auth_kernel.h
@@ -101,9 +101,8 @@ extern u32 iscsi_handle_authentication (
s_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
s_addr.sin_port = htons(AUTH_PORT);

- if (iscsi_sock_create(&authsock, AF_INET, SOCK_DGRAM, IPPROTO_UDP,
- NULL, NULL) < 0) {
- TRACE_ERROR("iscsi_sock_create() failed!\n");
+ if (sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &authsock) < 0) {
+ TRACE_ERROR("sock_create() failed!\n");
ret = -1;
goto out;
}
diff --git a/drivers/lio-core/iscsi_linux_defs.h b/drivers/lio-core/iscsi_linux_defs.h
index f609c9d..52b55de 100644
--- a/drivers/lio-core/iscsi_linux_defs.h
+++ b/drivers/lio-core/iscsi_linux_defs.h
@@ -48,29 +48,6 @@
copy_to_user((void *)(dest), (void *)(src), (len))

/*
- * Sockets.
- */
-#define iscsi_sock_create(sock, f, t, p, uc, td) sock_create(f, t, p, sock)
-#define iscsi_sock_connect(sock, s_in, size, td) sock->ops->connect(sock, s_in, size, 0)
-#define iscsi_sock_bind(sock, s_in, size, td) sock->ops->bind(sock, s_in, size)
-#define iscsi_sock_listen(sock, backlog, td) sock->ops->listen(sock, backlog)
-#define iscsi_sock_accept(sock, newsock, td) sock->ops->accept(sock, newsock, 0)
-#define iscsi_sock_sockopt_off(sock, p, o) \
- { \
- int value = 0; \
- sock->ops->setsockopt(sock, p, o, (char *)&value, sizeof(value)); \
- }
-#define iscsi_sock_sockopt_on(sock, p, o) \
- { \
- int value = 1; \
- sock->ops->setsockopt(sock, p, o, (char *)&value, sizeof(value)); \
- }
-#define iscsi_sock_sockopt_bindtodev(sock, dev) \
- { \
- sock->ops->setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, dev, strlen(dev)); \
- }
-
-/*
* Threads.
*/
#define iscsi_daemon(thread, name, sigs) \
diff --git a/drivers/lio-core/iscsi_target_login.c b/drivers/lio-core/iscsi_target_login.c
index 6c49e77..0b0a54a 100644
--- a/drivers/lio-core/iscsi_target_login.c
+++ b/drivers/lio-core/iscsi_target_login.c
@@ -737,7 +737,7 @@ static struct socket *iscsi_target_setup_login_socket (iscsi_np_t *np)
{
const char *end;
struct socket *sock;
- int backlog = 5, ip_proto, sock_type, ret;
+ int backlog = 5, ip_proto, sock_type, ret, opt = 0;
struct sockaddr_in sock_in;
struct sockaddr_in6 sock_in6;

@@ -763,9 +763,9 @@ static struct socket *iscsi_target_setup_login_socket (iscsi_np_t *np)
goto fail;
}

- if (iscsi_sock_create(&sock, (np->np_flags & NPF_NET_IPV6) ? AF_INET6 :
- AF_INET, sock_type, ip_proto, NULL, NULL) < 0) {
- TRACE_ERROR("iscsi_sock_create() failed.\n");
+ if (sock_create((np->np_flags & NPF_NET_IPV6) ? AF_INET6 : AF_INET,
+ sock_type, ip_proto, &sock) < 0) {
+ TRACE_ERROR("sock_create() failed.\n");
goto fail;
}
np->np_socket = sock;
@@ -814,28 +814,39 @@ static struct socket *iscsi_target_setup_login_socket (iscsi_np_t *np)

/*
* Set SO_REUSEADDR, and disable Nagel Algorithm with TCP_NODELAY.
- * NOTE: setsockopt() w/ SO_REUSEADDR on LINUX 2.4 is broken, force it.
*/
- iscsi_sock_sockopt_on(sock, IPPROTO_TCP, TCP_NODELAY);
- iscsi_sock_sockopt_on(sock, SOL_SOCKET, SO_REUSEADDR);
- sock->sk->sk_reuse = 1;
+ opt = 1;
+ if (np->np_network_transport == ISCSI_TCP) {
+ if ((ret = kernel_setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
+ (char *)&opt, sizeof(opt))) < 0) {
+ printk(KERN_ERR "kernel_setsockopt() for TCP_NODELAY"
+ " failed: %d\n", ret);
+ goto fail;
+ }
+ }
+ if ((ret = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
+ (char *)&opt, sizeof(opt))) < 0) {
+ printk(KERN_ERR "kernel_setsockopt() for SO_REUSEADDR"
+ " failed\n");
+ goto fail;
+ }

if (np->np_flags & NPF_NET_IPV6) {
- if ((ret = iscsi_sock_bind(sock, (struct sockaddr *)&sock_in6,
- sizeof(struct sockaddr_in6), NULL)) < 0) {
- TRACE_ERROR("iscsi_sock_bind() failed: %d\n", ret);
+ if ((ret = kernel_bind(sock, (struct sockaddr *)&sock_in6,
+ sizeof(struct sockaddr_in6))) < 0) {
+ TRACE_ERROR("kernel_bind() failed: %d\n", ret);
goto fail;
}
} else {
- if ((ret = iscsi_sock_bind(sock, (struct sockaddr *)&sock_in,
- sizeof(struct sockaddr), NULL)) < 0) {
- TRACE_ERROR("iscsi_sock_bind() failed: %d\n", ret);
+ if ((ret = kernel_bind(sock, (struct sockaddr *)&sock_in,
+ sizeof(struct sockaddr))) < 0) {
+ TRACE_ERROR("kernel_bind() failed: %d\n", ret);
goto fail;
}
}

- if (iscsi_sock_listen(sock, backlog, NULL)) {
- TRACE_ERROR("iscsi_sock_listen() failed.\n");
+ if (kernel_listen(sock, backlog)) {
+ TRACE_ERROR("kernel_listen() failed.\n");
goto fail;
}

@@ -914,9 +925,9 @@ get_new_sock:
return(-1);
}

- if (iscsi_sock_create(&new_sock, (np->np_flags & NPF_NET_IPV6) ? AF_INET6 :
- AF_INET, sock_type, ip_proto, NULL, NULL) < 0) {
- TRACE_ERROR("iscsi_sock_create() failed for new_sock\n");
+ if (sock_create((np->np_flags & NPF_NET_IPV6) ? AF_INET6 : AF_INET,
+ sock_type, ip_proto, &new_sock) < 0) {
+ TRACE_ERROR("sock_create() failed for new_sock\n");
if (start) {
up(&np->np_start_sem);
return(0);
@@ -968,7 +979,7 @@ get_new_sock:
}
spin_unlock_bh(&np->np_thread_lock);

- if (iscsi_sock_accept(sock, new_sock, NULL) < 0) {
+ if (kernel_accept(sock, &new_sock, 0) < 0) {
if (new_sock) {
if (set_sctp_conn_flag) {
kfree(new_sock->file);
--
1.5.4.1



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/