]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: be more paranoid in prepare_pages
authorSage Weil <sage@newdream.net>
Tue, 30 Sep 2008 19:59:27 +0000 (12:59 -0700)
committerSage Weil <sage@newdream.net>
Tue, 30 Sep 2008 19:59:27 +0000 (12:59 -0700)
It's theoretically possible to get racing incoming osd_op_replies.  Make sure we only give the pages away once.

src/kernel/osd_client.c

index 83c8153cf05c678167807abc1b7bda1b282b029d..61967c8c59720daa2cdfe0e67ffc300be02ddf6e 100644 (file)
@@ -512,7 +512,8 @@ int ceph_osdc_prepare_pages(void *p, struct ceph_msg *m, int want)
        }
        dout(10, "prepare_pages tid %llu have %d pages, want %d\n",
             tid, req->r_num_pages, want);
-       if (likely(req->r_num_pages >= want)) {
+       if (likely(req->r_num_pages >= want &&
+                  req->r_reply == 0)) {
                m->pages = req->r_pages;
                m->nr_pages = req->r_num_pages;
                ceph_msg_get(m);