]> Pileus Git - ~andy/linux/commitdiff
ceph: use ceph_create_snap_context()
authorAlex Elder <elder@inktank.com>
Tue, 30 Apr 2013 05:44:32 +0000 (00:44 -0500)
committerSage Weil <sage@inktank.com>
Thu, 2 May 2013 04:20:09 +0000 (21:20 -0700)
Now that we have a library routine to create snap contexts, use it.

This is part of:
    http://tracker.ceph.com/issues/4857

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
drivers/block/rbd.c
fs/ceph/snap.c

index d41f976903432ca2457b9a4c8c5068b640e943a3..5c1c38dc0b51c09bd1ba36c9d7c0b5c13b4dd127 100644 (file)
@@ -672,35 +672,6 @@ static void rbd_client_release(struct kref *kref)
        kfree(rbdc);
 }
 
-/* Caller has to fill in snapc->seq and snapc->snaps[0..snap_count-1] */
-
-static struct ceph_snap_context *rbd_snap_context_create(u32 snap_count)
-{
-       struct ceph_snap_context *snapc;
-       size_t size;
-
-       size = sizeof (struct ceph_snap_context);
-       size += snap_count * sizeof (snapc->snaps[0]);
-       snapc = kzalloc(size, GFP_KERNEL);
-       if (!snapc)
-               return NULL;
-
-       atomic_set(&snapc->nref, 1);
-       snapc->num_snaps = snap_count;
-
-       return snapc;
-}
-
-static inline void rbd_snap_context_get(struct ceph_snap_context *snapc)
-{
-       (void)ceph_get_snap_context(snapc);
-}
-
-static inline void rbd_snap_context_put(struct ceph_snap_context *snapc)
-{
-       ceph_put_snap_context(snapc);
-}
-
 /*
  * Drop reference to ceph client node. If it's not referenced anymore, release
  * it.
@@ -820,7 +791,7 @@ static int rbd_header_from_disk(struct rbd_image_header *header,
 
        header->image_size = le64_to_cpu(ondisk->image_size);
 
-       header->snapc = rbd_snap_context_create(snap_count);
+       header->snapc = ceph_create_snap_context(snap_count, GFP_KERNEL);
        if (!header->snapc)
                goto out_err;
        header->snapc->seq = le64_to_cpu(ondisk->snap_seq);
@@ -1753,7 +1724,7 @@ static struct rbd_img_request *rbd_img_request_create(
 
        if (write_request) {
                down_read(&rbd_dev->header_rwsem);
-               rbd_snap_context_get(rbd_dev->header.snapc);
+               ceph_get_snap_context(rbd_dev->header.snapc);
                up_read(&rbd_dev->header_rwsem);
        }
 
@@ -1805,7 +1776,7 @@ static void rbd_img_request_destroy(struct kref *kref)
        rbd_assert(img_request->obj_request_count == 0);
 
        if (img_request_write_test(img_request))
-               rbd_snap_context_put(img_request->snapc);
+               ceph_put_snap_context(img_request->snapc);
 
        if (img_request_child_test(img_request))
                rbd_obj_request_put(img_request->obj_request);
@@ -3071,7 +3042,7 @@ static int rbd_dev_v1_refresh(struct rbd_device *rbd_dev, u64 *hver)
        kfree(rbd_dev->header.snap_sizes);
        kfree(rbd_dev->header.snap_names);
        /* osd requests may still refer to snapc */
-       rbd_snap_context_put(rbd_dev->header.snapc);
+       ceph_put_snap_context(rbd_dev->header.snapc);
 
        if (hver)
                *hver = h.obj_version;
@@ -3914,7 +3885,7 @@ static int rbd_dev_v2_snap_context(struct rbd_device *rbd_dev, u64 *ver)
                goto out;
        ret = 0;
 
-       snapc = rbd_snap_context_create(snap_count);
+       snapc = ceph_create_snap_context(snap_count, GFP_KERNEL);
        if (!snapc) {
                ret = -ENOMEM;
                goto out;
@@ -4590,7 +4561,7 @@ static void rbd_dev_unprobe(struct rbd_device *rbd_dev)
        /* Free dynamic fields from the header, then zero it out */
 
        header = &rbd_dev->header;
-       rbd_snap_context_put(header->snapc);
+       ceph_put_snap_context(header->snapc);
        kfree(header->snap_sizes);
        kfree(header->snap_names);
        kfree(header->object_prefix);
index cbb2f54a301971cea4e7ed02b029c3e7979cbc18..f01645a27752bfcde801206538728c90463a1e0d 100644 (file)
@@ -332,10 +332,9 @@ static int build_snap_context(struct ceph_snap_realm *realm)
        err = -ENOMEM;
        if (num > (SIZE_MAX - sizeof(*snapc)) / sizeof(u64))
                goto fail;
-       snapc = kzalloc(sizeof(*snapc) + num*sizeof(u64), GFP_NOFS);
+       snapc = ceph_create_snap_context(num, GFP_NOFS);
        if (!snapc)
                goto fail;
-       atomic_set(&snapc->nref, 1);
 
        /* build (reverse sorted) snap vector */
        num = 0;