From 273a3871e59040fb3d36efbbce967142c10e7700 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 14 Apr 2008 12:51:10 -0700 Subject: [PATCH] kclient: reorder mdsc delayed work wrt spinlocks --- src/kernel/mds_client.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index b3541762033cb..7fdfc4a5e3783 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -1562,8 +1562,8 @@ void delayed_work(struct work_struct *work) spin_lock(&mdsc->lock); } - schedule_delayed(mdsc); spin_unlock(&mdsc->lock); + schedule_delayed(mdsc); } @@ -1588,6 +1588,9 @@ void ceph_mdsc_stop(struct ceph_mds_client *mdsc) int n; dout(10, "stop\n"); + + cancel_delayed_work_sync(&mdsc->delayed_work); /* cancel timer */ + spin_lock(&mdsc->lock); /* close sessions, caps */ @@ -1611,7 +1614,6 @@ void ceph_mdsc_stop(struct ceph_mds_client *mdsc) spin_lock(&mdsc->lock); } - cancel_delayed_work_sync(&mdsc->delayed_work); /* cancel timer */ spin_unlock(&mdsc->lock); } @@ -1682,13 +1684,15 @@ void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc, struct ceph_msg *msg) dout(2, "got first mdsmap %u\n", newmap->m_epoch); mdsc->mdsmap = newmap; } + /* stop asking */ ceph_monc_got_mdsmap(&mdsc->client->monc, newmap->m_epoch); + spin_unlock(&mdsc->lock); + /* (re)schedule work */ schedule_delayed(mdsc); - spin_unlock(&mdsc->lock); complete(&mdsc->map_waiters); return; -- 2.39.5