ldlm_proc_setup and ldlm_proc_cleanup should reset global
pde pointers otherwise remount may hit
LASSERT(ldlm_ns_proc_dir == NULL);

Also in libcfs_sock_ioctl, fput() includes itself sock_release.
So don't call sock_release twice otherwise kernel may oops
due to incorrect inode ref counting.

Signed-off-by: Peng Tao <tao.p...@emc.com>
Signed-off-by: Andreas Dilger <andreas.dil...@intel.com>
---
 drivers/staging/lustre/lustre/ldlm/ldlm_resource.c |    6 ++++++
 .../lustre/lustre/libcfs/linux/linux-tcpip.c       |    9 ++-------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c 
b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c
index f4d5b50..9052dc5 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c
@@ -130,6 +130,8 @@ err_type:
        lprocfs_remove(&ldlm_type_proc_dir);
 err:
        ldlm_svc_proc_dir = NULL;
+       ldlm_type_proc_dir = NULL;
+       ldlm_ns_proc_dir = NULL;
        RETURN(rc);
 }
 
@@ -143,6 +145,10 @@ void ldlm_proc_cleanup(void)
 
        if (ldlm_type_proc_dir)
                lprocfs_remove(&ldlm_type_proc_dir);
+
+       ldlm_svc_proc_dir = NULL;
+       ldlm_type_proc_dir = NULL;
+       ldlm_ns_proc_dir = NULL;
 }
 
 static int lprocfs_ns_resources_seq_show(struct seq_file *m, void *v)
diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c 
b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c
index 4a01816..6f1f047 100644
--- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c
+++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c
@@ -49,7 +49,6 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
 {
        mm_segment_t    oldmm = get_fs();
        struct socket  *sock;
-       int          fd = -1;
        int          rc;
        struct file    *sock_filp;
 
@@ -61,6 +60,7 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
 
        sock_filp = sock_alloc_file(sock, 0, NULL);
        if (!sock_filp) {
+               sock_release(sock);
                rc = -ENOMEM;
                goto out;
        }
@@ -71,12 +71,7 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
        set_fs(oldmm);
 
        fput(sock_filp);
-
- out:
-       if (fd >= 0)
-               sys_close(fd);
-       else
-               sock_release(sock);
+out:
        return rc;
 }
 
-- 
1.7.9.5

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to