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.peng@emc.com>
Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
        lprocfs_remove(&ldlm_type_proc_dir);
 err:
        ldlm_svc_proc_dir = NULL;
+       ldlm_type_proc_dir = NULL;
+       ldlm_ns_proc_dir = NULL;
        RETURN(rc);
 }
 
 
        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)
 
 {
        mm_segment_t    oldmm = get_fs();
        struct socket  *sock;
-       int          fd = -1;
        int          rc;
        struct file    *sock_filp;
 
 
        sock_filp = sock_alloc_file(sock, 0, NULL);
        if (!sock_filp) {
+               sock_release(sock);
                rc = -ENOMEM;
                goto out;
        }
        set_fs(oldmm);
 
        fput(sock_filp);
-
- out:
-       if (fd >= 0)
-               sys_close(fd);
-       else
-               sock_release(sock);
+out:
        return rc;
 }