Whamcloud - gitweb
LU-2686 kernel: sock_map_fd() replaced by sock_alloc_file() 73/5973/6
authoryangsheng <yang.sheng@intel.com>
Mon, 8 Apr 2013 13:14:09 +0000 (21:14 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 21 Jun 2013 20:39:55 +0000 (20:39 +0000)
Use sock_alloc_file() replace sock_map_fd()

Signed-off-by: yang sheng <yang.sheng@intel.com>
Change-Id: I04cbcd651689af6b82b48ba5d49ddbf99a6758bf
Reviewed-on: http://review.whamcloud.com/5973
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Peng Tao <bergwolf@gmail.com>
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Alexey Shvetsov <alexxy@gentoo.org>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
libcfs/autoconf/lustre-libcfs.m4
libcfs/libcfs/linux/linux-tcpip.c

index b5bfd3e..0f53b9a 100644 (file)
@@ -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 <linux/net.h>
+       ],[
+               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
 ])
 
 #
index 0a31b55..e7bd69e 100644 (file)
 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;
 }