From: yangsheng Date: Mon, 8 Apr 2013 13:14:09 +0000 (+0800) Subject: LU-2686 kernel: sock_map_fd() replaced by sock_alloc_file() X-Git-Tag: 2.4.51~6 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=b4abb1ebcbad140b4b0436dac43a4c34184de4e9;hp=8754c2a1f61a594714de596eb27879a0d9d4ef42 LU-2686 kernel: sock_map_fd() replaced by sock_alloc_file() Use sock_alloc_file() replace sock_map_fd() Signed-off-by: yang sheng Change-Id: I04cbcd651689af6b82b48ba5d49ddbf99a6758bf Reviewed-on: http://review.whamcloud.com/5973 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Peng Tao Reviewed-by: James Simmons Reviewed-by: Alexey Shvetsov Reviewed-by: Oleg Drokin --- diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4 index b5bfd3e..0f53b9a 100644 --- a/libcfs/autoconf/lustre-libcfs.m4 +++ b/libcfs/autoconf/lustre-libcfs.m4 @@ -767,6 +767,31 @@ LB_LINUX_TRY_COMPILE([ ]) # +# FC18 3.7.2-201 unexport sock_map_fd() change to +# use sock_alloc_file(). +# upstream commit 56b31d1c9f1e6a3ad92e7bfe252721e05d92b285 +# +AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE], +[AC_MSG_CHECKING([sock_alloc_file is exported]) +LB_CHECK_SYMBOL_EXPORT([sock_alloc_file], [net/socket.c],[ + LB_LINUX_TRY_COMPILE([ + #include + ],[ + sock_alloc_file(NULL, 0, NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SOCK_ALLOC_FILE_3ARGS, 1, + [sock_alloc_file takes 3 arguments]) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1, + [sock_alloc_file is exported]) + ]) +],[ +]) +]) + +# # LIBCFS_PROG_LINUX # # LNet linux kernel checks @@ -822,6 +847,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE LC_SK_SLEEP # 2.6.40 fc15 LC_SHRINK_CONTROL +# 3.7 +LIBCFS_SOCK_ALLOC_FILE ]) # diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c index 0a31b55..e7bd69e 100644 --- a/libcfs/libcfs/linux/linux-tcpip.c +++ b/libcfs/libcfs/linux/linux-tcpip.c @@ -47,11 +47,11 @@ int libcfs_sock_ioctl(int cmd, unsigned long arg) { - mm_segment_t oldmm = get_fs(); - struct socket *sock; - int fd; - int rc; - struct file *sock_filp; + mm_segment_t oldmm = get_fs(); + struct socket *sock; + int fd = -1; + int rc; + struct file *sock_filp; rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); if (rc != 0) { @@ -59,21 +59,29 @@ libcfs_sock_ioctl(int cmd, unsigned long arg) return rc; } -#ifdef HAVE_SOCK_MAP_FD_2ARG - fd = sock_map_fd(sock,0); +#if !defined(HAVE_SOCK_ALLOC_FILE) && !defined(HAVE_SOCK_ALLOC_FILE_3ARGS) +# ifdef HAVE_SOCK_MAP_FD_2ARG + fd = sock_map_fd(sock,0); +# else + fd = sock_map_fd(sock); +# endif + if (fd < 0) { + rc = fd; + sock_release(sock); + goto out; + } + sock_filp = fget(fd); #else - fd = sock_map_fd(sock); +# ifdef HAVE_SOCK_ALLOC_FILE_3ARGS + sock_filp = sock_alloc_file(sock, 0, NULL); +# else + sock_filp = sock_alloc_file(sock, 0); +# endif #endif - if (fd < 0) { - rc = fd; - sock_release(sock); - goto out; - } - - sock_filp = fget(fd); if (!sock_filp) { rc = -ENOMEM; - goto out_fd; + sock_release(sock); + goto out; } set_fs(KERNEL_DS); @@ -83,9 +91,10 @@ libcfs_sock_ioctl(int cmd, unsigned long arg) fput(sock_filp); - out_fd: - sys_close(fd); out: + if (fd >= 0) + sys_close(fd); + return rc; }