Skip to content

Commit

Permalink
ceph: trim unused inodes before reconnecting to recovering MDS
Browse files Browse the repository at this point in the history
So the recovering MDS does not need to fetch these ununsed inodes during
cache rejoin. This may reduce MDS recovery time.

Signed-off-by: Yan, Zheng <zyan@redhat.com>
  • Loading branch information
ukernel authored and idryomov committed Oct 14, 2014
1 parent 589506f commit 5d23371
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -2695,16 +2695,6 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
session->s_state = CEPH_MDS_SESSION_RECONNECTING;
session->s_seq = 0;

ceph_con_close(&session->s_con);
ceph_con_open(&session->s_con,
CEPH_ENTITY_TYPE_MDS, mds,
ceph_mdsmap_get_addr(mdsc->mdsmap, mds));

/* replay unsafe requests */
replay_unsafe_requests(mdsc, session);

down_read(&mdsc->snap_rwsem);

dout("session %p state %s\n", session,
session_state_name(session->s_state));

Expand All @@ -2723,6 +2713,19 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
discard_cap_releases(mdsc, session);
spin_unlock(&session->s_cap_lock);

/* trim unused caps to reduce MDS's cache rejoin time */
shrink_dcache_parent(mdsc->fsc->sb->s_root);

ceph_con_close(&session->s_con);
ceph_con_open(&session->s_con,
CEPH_ENTITY_TYPE_MDS, mds,
ceph_mdsmap_get_addr(mdsc->mdsmap, mds));

/* replay unsafe requests */
replay_unsafe_requests(mdsc, session);

down_read(&mdsc->snap_rwsem);

/* traverse this session's caps */
s_nr_caps = session->s_nr_caps;
err = ceph_pagelist_encode_32(pagelist, s_nr_caps);
Expand Down

0 comments on commit 5d23371

Please sign in to comment.