]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/ceph/caps.c
ceph: do not touch_caps while iterating over caps list
[net-next-2.6.git] / fs / ceph / caps.c
index dfb509f53542a19ead1fea327a60db05e2921470..93c1afe3f0b3ecb395af080bdef0b7f046eadf1a 100644 (file)
@@ -697,10 +697,15 @@ static void __touch_cap(struct ceph_cap *cap)
 {
        struct ceph_mds_session *s = cap->session;
 
-       dout("__touch_cap %p cap %p mds%d\n", &cap->ci->vfs_inode, cap,
-            s->s_mds);
        spin_lock(&s->s_cap_lock);
-       list_move_tail(&cap->session_caps, &s->s_caps);
+       if (!s->s_iterating_caps) {
+               dout("__touch_cap %p cap %p mds%d\n", &cap->ci->vfs_inode, cap,
+                    s->s_mds);
+               list_move_tail(&cap->session_caps, &s->s_caps);
+       } else {
+               dout("__touch_cap %p cap %p mds%d NOP, iterating over caps\n",
+                    &cap->ci->vfs_inode, cap, s->s_mds);
+       }
        spin_unlock(&s->s_cap_lock);
 }