ceph: cope with out of order (unsafe after safe) mds reply
authorSage Weil <sage@newdream.net>
Thu, 13 May 2010 16:06:02 +0000 (09:06 -0700)
committerSage Weil <sage@newdream.net>
Mon, 17 May 2010 22:25:39 +0000 (15:25 -0700)
Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/mds_client.c

index 114bada97c16cc5a44bf2d2fac4c461c77a9fe82..40dd437a26a9dfd701cb07dd48ea0351e74f2a73 100644 (file)
@@ -1871,6 +1871,12 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
                mutex_unlock(&mdsc->mutex);
                goto out;
        }
+       if (req->r_got_safe && !head->safe) {
+               pr_warning("got unsafe after safe on %llu from mds%d\n",
+                          tid, mds);
+               mutex_unlock(&mdsc->mutex);
+               goto out;
+       }
 
        result = le32_to_cpu(head->result);