From: Liu Yuan <[email protected]>

v2: add flag check back, because QEMU will flag the request.
------------------------------------------ >8

- we should check if object is cached on the first place
- use goto to bypass other unnecessary checks.
- remove unnecessay lines in need_consistency_check()

Signed-off-by: Liu Yuan <[email protected]>
---
 sheep/sdnet.c |   18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/sheep/sdnet.c b/sheep/sdnet.c
index 86d30d8..17202ad 100644
--- a/sheep/sdnet.c
+++ b/sheep/sdnet.c
@@ -55,10 +55,6 @@ static int need_consistency_check(struct request *req)
                /* only check consistency for data objects */
                return 0;
 
-       if (sys->enable_write_cache && object_is_cached(hdr->obj.oid))
-               /* we don't check consistency for cached objects */
-               return 0;
-
        return 1;
 }
 
@@ -343,19 +339,21 @@ static void queue_gateway_request(struct request *req)
                req->local_oid = hdr->obj.oid;
 
        /*
-        * If we go for a cached object, we don't care if it is being recovered.
+        * If we go for a cached object, we don't care if it is being recovered
         */
-       if (req->local_oid &&
-           (!sys->enable_write_cache ||
-            !(req->rq.flags & SD_FLAG_CMD_CACHE) ||
-            !object_is_cached(req->rq.obj.oid))) {
+       if (sys->enable_write_cache &&
+           req->rq.flags & SD_FLAG_CMD_CACHE &&
+           object_is_cached(req->rq.obj.oid))
+               goto queue_work;
+
+       if (req->local_oid)
                if (request_in_recovery(req))
                        return;
-       }
 
        if (need_consistency_check(req))
                set_consistency_check(req);
 
+queue_work:
        req->work.fn = do_gateway_request;
        req->work.done = gateway_op_done;
        queue_work(sys->gateway_wqueue, &req->work);
-- 
1.7.10.2

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to