ceph: avoid panic in create_session_open_msg() if utsname() returns NULL
utsname() can return NULL while process is exiting. Kernel releases file locks during process exits. We send request to mds when releasing file lock. So it's possible that we open mds session while process is exiting. utsname() is called in create_session_open_msg(). Link: http://tracker.ceph.com/issues/21275 Signed-off-by: "Yan, Zheng" <zyan@redhat.com> Reviewed-by: Jeff Layton <jlayton@redhat.com> [idryomov@gmail.com: drop utsname.h include from mds_client.c] Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/ratelimit.h>
|
||||
|
||||
#include "super.h"
|
||||
@@ -884,8 +883,8 @@ static struct ceph_msg *create_session_open_msg(struct ceph_mds_client *mdsc, u6
|
||||
void *p;
|
||||
|
||||
const char* metadata[][2] = {
|
||||
{"hostname", utsname()->nodename},
|
||||
{"kernel_version", utsname()->release},
|
||||
{"hostname", mdsc->nodename},
|
||||
{"kernel_version", init_utsname()->release},
|
||||
{"entity_id", opt->name ? : ""},
|
||||
{"root", fsopt->server_path ? : "/"},
|
||||
{NULL, NULL}
|
||||
@@ -3539,6 +3538,8 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)
|
||||
init_rwsem(&mdsc->pool_perm_rwsem);
|
||||
mdsc->pool_perm_tree = RB_ROOT;
|
||||
|
||||
strncpy(mdsc->nodename, utsname()->nodename,
|
||||
sizeof(mdsc->nodename) - 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user