From d19f8bef6b70c625779b07f92498c2ac9a3c4521 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 19 Aug 2008 16:06:36 -0700 Subject: [PATCH] kclient: drop snap_rwsem while waiting for mds sessions to close --- src/kernel/caps.c | 9 +++++---- src/kernel/mds_client.c | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/kernel/caps.c b/src/kernel/caps.c index e874ee77c7a0b..2e311bd565bff 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -897,12 +897,13 @@ void ceph_handle_caps(struct ceph_mds_client *mdsc, mutex_lock(&session->s_mutex); session->s_seq++; + dout(20, " mds%d seq %lld\n", session->s_mds, session->s_seq); /* lookup ino */ inode = ceph_find_inode(sb, vino); - dout(20, "op %d ino %llx inode %p\n", op, vino.ino, inode); + dout(20, " op %d ino %llx inode %p\n", op, vino.ino, inode); if (!inode) { - dout(10, "i don't have ino %llx, sending release\n", vino.ino); + dout(10, " i don't have ino %llx, sending release\n", vino.ino); send_cap(mdsc, vino.ino, CEPH_CAP_OP_RELEASE, 0, 0, seq, size, 0, 0, 0, 0, 0, 0, mds); goto no_inode; @@ -912,7 +913,7 @@ void ceph_handle_caps(struct ceph_mds_client *mdsc, case CEPH_CAP_OP_GRANT: up_write(&mdsc->snap_rwsem); if (handle_cap_grant(inode, h, session) == 1) { - dout(10, "sending reply back to mds%d\n", mds); + dout(10, " sending reply back to mds%d\n", mds); ceph_msg_get(msg); ceph_send_msg_mds(mdsc, msg, mds); } @@ -947,7 +948,7 @@ void ceph_handle_caps(struct ceph_mds_client *mdsc, default: up_write(&mdsc->snap_rwsem); - derr(10, "unknown cap op %d %s\n", op, ceph_cap_op_name(op)); + derr(10, " unknown cap op %d %s\n", op, ceph_cap_op_name(op)); } iput(inode); diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index a94f442c1cb84..6219011517a56 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -1978,8 +1978,10 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc) dout(10, "waiting for sessions to close\n"); mutex_unlock(&mdsc->mutex); + up_write(&mdsc->snap_rwsem); wait_for_completion(&mdsc->session_close_waiters); mutex_lock(&mdsc->mutex); + down_write(&mdsc->snap_rwsem); } WARN_ON(!list_empty(&mdsc->cap_delay_list)); -- 2.39.5