We'll grow another copy of this code soon, so move it into a separate
function in preparation of that.

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

---
 sheep/object_cache.c |   21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

Index: sheepdog/sheep/object_cache.c
===================================================================
--- sheepdog.orig/sheep/object_cache.c  2012-07-16 10:41:54.276794693 +0200
+++ sheepdog/sheep/object_cache.c       2012-07-16 10:56:06.590141046 +0200
@@ -275,6 +275,18 @@ alloc_cache_entry(uint32_t idx, uint64_t
        return entry;
 }
 
+static void update_cache_entry(struct object_cache *oc, uint32_t idx,
+               size_t datalen, off_t offset)
+{
+       struct object_cache_entry *entry;
+
+       entry = alloc_cache_entry(idx, calc_object_bmap(datalen, offset), 0);
+
+       pthread_mutex_lock(&oc->lock);
+       add_to_dirty_tree_and_list(oc, entry);
+       pthread_mutex_unlock(&oc->lock);
+}
+
 static int object_cache_lookup(struct object_cache *oc, uint32_t idx,
                               int create)
 {
@@ -416,24 +428,17 @@ static int object_cache_rw(struct object
                           struct request *req)
 {
        struct sd_req *hdr = &req->rq;
-       uint64_t bmap = 0;
        int ret;
 
        dprintf("%08"PRIx32", len %"PRIu32", off %"PRIu64"\n", idx,
                hdr->data_length, hdr->obj.offset);
 
        if (hdr->flags & SD_FLAG_CMD_WRITE) {
-               struct object_cache_entry *entry;
-
                ret = write_cache_object(oc->vid, idx, req->data,
                                         hdr->data_length, hdr->obj.offset);
                if (ret != SD_RES_SUCCESS)
                        goto out;
-               bmap = calc_object_bmap(hdr->data_length, hdr->obj.offset);
-               entry = alloc_cache_entry(idx, bmap, 0);
-               pthread_mutex_lock(&oc->lock);
-               add_to_dirty_tree_and_list(oc, entry);
-               pthread_mutex_unlock(&oc->lock);
+               update_cache_entry(oc, idx, hdr->data_length, hdr->obj.offset);
        } else {
                ret = read_cache_object(oc->vid, idx, req->data,
                                        hdr->data_length, hdr->obj.offset);

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

Reply via email to