This simplifies one of the callers a lot by not having to fake up a
struct request.

Signed-off-by: Christoph Hellwig <[email protected]>

---
 sheep/object_cache.c |   49 ++++++++++++-------------------------------------
 1 file changed, 12 insertions(+), 37 deletions(-)

Index: sheepdog/sheep/object_cache.c
===================================================================
--- sheepdog.orig/sheep/object_cache.c  2012-07-13 12:47:14.000000000 +0200
+++ sheepdog/sheep/object_cache.c       2012-07-13 12:49:49.649897243 +0200
@@ -413,23 +413,21 @@ out:
 }
 
 static int object_cache_write_int(struct object_cache *oc, uint32_t idx,
-               struct request *req)
+               char *data, unsigned int data_length, uint64_t offset)
 {
-       struct sd_req *hdr = &req->rq;
        struct object_cache_entry *entry;
        uint64_t bmap = 0;
        int ret;
 
        dprintf("%08"PRIx32", len %"PRIu32", off %"PRIu64"\n", idx,
-               hdr->data_length, hdr->obj.offset);
+               data_length, offset);
 
 
-       ret = write_cache_object(oc->vid, idx, req->data, hdr->data_length,
-                                hdr->obj.offset);
+       ret = write_cache_object(oc->vid, idx, data, data_length, offset);
        if (ret != SD_RES_SUCCESS)
                return ret;
 
-       bmap = calc_object_bmap(hdr->data_length, hdr->obj.offset);
+       bmap = calc_object_bmap(data_length, offset);
        entry = alloc_cache_entry(idx, bmap, 0);
 
        pthread_mutex_lock(&oc->lock);
@@ -767,9 +765,11 @@ int object_cache_handle_request(struct r
                        return ret;
        }
 
-       if (req->rq.flags & SD_FLAG_CMD_WRITE)
-               ret = object_cache_write_int(cache, idx, req);
-       else {
+       if (req->rq.flags & SD_FLAG_CMD_WRITE) {
+               ret = object_cache_write_int(cache, idx, req->data,
+                                            req->rq.data_length,
+                                            req->rq.obj.offset);
+       } else {
                ret = read_cache_object(cache->vid, idx, req->data,
                                        req->rq.data_length,
                                        req->rq.obj.offset);
@@ -783,35 +783,10 @@ int object_cache_handle_request(struct r
 int object_cache_write(uint64_t oid, char *data, unsigned int datalen,
                       uint64_t offset, uint16_t flags, int create)
 {
-       int ret;
-       struct request *req;
-       uint32_t vid = oid_to_vid(oid);
-       uint32_t idx = object_cache_oid_to_idx(oid);
-       struct object_cache *cache;
-
-       cache = find_object_cache(vid, 0);
-
-       req = zalloc(sizeof(*req));
-       if (!req)
-               return SD_RES_NO_MEM;
+       struct object_cache *cache = find_object_cache(oid_to_vid(oid), 0);
 
-       if (create)
-               sd_init_req(&req->rq, SD_OP_CREATE_AND_WRITE_OBJ);
-       else
-               sd_init_req(&req->rq, SD_OP_WRITE_OBJ);
-       req->rq.flags = flags | SD_FLAG_CMD_WRITE;
-       req->rq.data_length = datalen;
-
-       req->rq.obj.oid = oid;
-       req->rq.obj.offset = offset;
-
-       req->data = data;
-       req->op = get_sd_op(req->rq.opcode);
-
-       ret = object_cache_write_int(cache, idx, req);
-
-       free(req);
-       return ret;
+       return object_cache_write_int(cache, object_cache_oid_to_idx(oid),
+                                     data, datalen, offset);
 }
 
 int object_cache_read(uint64_t oid, char *data, unsigned int datalen,

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

Reply via email to