From 66daf9cdbc8a6eff03248403cfada84f08f5a4dd Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 30 Sep 2008 12:59:27 -0700 Subject: [PATCH] kclient: be more paranoid in prepare_pages 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 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/kernel/osd_client.c b/src/kernel/osd_client.c index 83c8153cf05c6..61967c8c59720 100644 --- a/src/kernel/osd_client.c +++ b/src/kernel/osd_client.c @@ -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); -- 2.39.5