Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02ac956c authored by Ilya Dryomov's avatar Ilya Dryomov
Browse files

libceph: move debugfs initialization into __ceph_open_session()



Our debugfs dir name is a concatenation of cluster fsid and client
unique ID ("global_id").  It used to be the case that we learned
global_id first, nowadays we always learn fsid first - the monmap is
sent before any auth replies are.  ceph_debugfs_client_init() call in
ceph_monc_handle_map() is therefore never executed and can be removed.

Its counterpart in handle_auth_reply() doesn't really belong there
either: having to do monc->client and unlocking early to work around
lockdep is a testament to that.  Move it into __ceph_open_session(),
where it can be called unconditionally.

Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 3c2de27d
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -686,6 +686,9 @@ int __ceph_open_session(struct ceph_client *client, unsigned long started)
			return client->auth_err;
			return client->auth_err;
	}
	}


	pr_info("client%llu fsid %pU\n", ceph_client_id(client), &client->fsid);
	ceph_debugfs_client_init(client);

	return 0;
	return 0;
}
}
EXPORT_SYMBOL(__ceph_open_session);
EXPORT_SYMBOL(__ceph_open_session);
+1 −51
Original line number Original line Diff line number Diff line
@@ -353,29 +353,15 @@ int ceph_monc_open_session(struct ceph_mon_client *monc)
}
}
EXPORT_SYMBOL(ceph_monc_open_session);
EXPORT_SYMBOL(ceph_monc_open_session);


/*
 * We require the fsid and global_id in order to initialize our
 * debugfs dir.
 */
static bool have_debugfs_info(struct ceph_mon_client *monc)
{
	dout("have_debugfs_info fsid %d globalid %lld\n",
	     (int)monc->client->have_fsid, monc->auth->global_id);
	return monc->client->have_fsid && monc->auth->global_id > 0;
}

static void ceph_monc_handle_map(struct ceph_mon_client *monc,
static void ceph_monc_handle_map(struct ceph_mon_client *monc,
				 struct ceph_msg *msg)
				 struct ceph_msg *msg)
{
{
	struct ceph_client *client = monc->client;
	struct ceph_client *client = monc->client;
	struct ceph_monmap *monmap = NULL, *old = monc->monmap;
	struct ceph_monmap *monmap = NULL, *old = monc->monmap;
	void *p, *end;
	void *p, *end;
	int had_debugfs_info, init_debugfs = 0;


	mutex_lock(&monc->mutex);
	mutex_lock(&monc->mutex);


	had_debugfs_info = have_debugfs_info(monc);

	dout("handle_monmap\n");
	dout("handle_monmap\n");
	p = msg->front.iov_base;
	p = msg->front.iov_base;
	end = p + msg->front.iov_len;
	end = p + msg->front.iov_len;
@@ -395,29 +381,10 @@ static void ceph_monc_handle_map(struct ceph_mon_client *monc,
	client->monc.monmap = monmap;
	client->monc.monmap = monmap;
	kfree(old);
	kfree(old);


	if (!client->have_fsid) {
	client->have_fsid = true;
	client->have_fsid = true;
		if (!had_debugfs_info && have_debugfs_info(monc)) {
			pr_info("client%lld fsid %pU\n",
				ceph_client_id(monc->client),
				&monc->client->fsid);
			init_debugfs = 1;
		}
		mutex_unlock(&monc->mutex);


		if (init_debugfs) {
			/*
			 * do debugfs initialization without mutex to avoid
			 * creating a locking dependency
			 */
			ceph_debugfs_client_init(monc->client);
		}

		goto out_unlocked;
	}
out:
out:
	mutex_unlock(&monc->mutex);
	mutex_unlock(&monc->mutex);
out_unlocked:
	wake_up_all(&client->auth_wq);
	wake_up_all(&client->auth_wq);
}
}


@@ -915,10 +882,8 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
{
{
	int ret;
	int ret;
	int was_auth = 0;
	int was_auth = 0;
	int had_debugfs_info, init_debugfs = 0;


	mutex_lock(&monc->mutex);
	mutex_lock(&monc->mutex);
	had_debugfs_info = have_debugfs_info(monc);
	was_auth = ceph_auth_is_authenticated(monc->auth);
	was_auth = ceph_auth_is_authenticated(monc->auth);
	monc->pending_auth = 0;
	monc->pending_auth = 0;
	ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base,
	ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base,
@@ -940,22 +905,7 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
		__send_subscribe(monc);
		__send_subscribe(monc);
		__resend_generic_request(monc);
		__resend_generic_request(monc);
	}
	}

	if (!had_debugfs_info && have_debugfs_info(monc)) {
		pr_info("client%lld fsid %pU\n",
			ceph_client_id(monc->client),
			&monc->client->fsid);
		init_debugfs = 1;
	}
	mutex_unlock(&monc->mutex);
	mutex_unlock(&monc->mutex);

	if (init_debugfs) {
		/*
		 * do debugfs initialization without mutex to avoid
		 * creating a locking dependency
		 */
		ceph_debugfs_client_init(monc->client);
	}
}
}


static int __validate_auth(struct ceph_mon_client *monc)
static int __validate_auth(struct ceph_mon_client *monc)