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;
}