]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: drop snap_rwsem while waiting for mds sessions to close
authorSage Weil <sage@newdream.net>
Tue, 19 Aug 2008 23:06:36 +0000 (16:06 -0700)
committerSage Weil <sage@newdream.net>
Tue, 19 Aug 2008 23:06:36 +0000 (16:06 -0700)
src/kernel/caps.c
src/kernel/mds_client.c

index e874ee77c7a0b06dc10b3c83b74adfc5d36ae071..2e311bd565bffff4421b99676411e1826544b1ec 100644 (file)
@@ -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);
index a94f442c1cb84ba68f4dea934dd7bf9ebcedd983..6219011517a56ba235a2b5a2a2a2211becb9c13d 100644 (file)
@@ -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));