Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 331684
b: refs/heads/master
c: 9d475de
h: refs/heads/master
v: v3
  • Loading branch information
Alex Elder committed Oct 1, 2012
1 parent 5f2977f commit 177c4ba
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a30b71b999c92071befec73434f4e67fd4b4734b
refs/heads/master: 9d475de5d12af8ac4c2101807e0a889ac7389c5a
53 changes: 53 additions & 0 deletions trunk/drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -2127,6 +2127,47 @@ static char *rbd_dev_v1_snap_info(struct rbd_device *rbd_dev, u32 which,
return snap_name;
}

/*
* Get the size and object order for an image snapshot, or if
* snap_id is CEPH_NOSNAP, gets this information for the base
* image.
*/
static int _rbd_dev_v2_snap_size(struct rbd_device *rbd_dev, u64 snap_id,
u8 *order, u64 *snap_size)
{
__le64 snapid = cpu_to_le64(snap_id);
int ret;
struct {
u8 order;
__le64 size;
} __attribute__ ((packed)) size_buf = { 0 };

ret = rbd_req_sync_exec(rbd_dev, rbd_dev->header_name,
"rbd", "get_size",
(char *) &snapid, sizeof (snapid),
(char *) &size_buf, sizeof (size_buf),
CEPH_OSD_FLAG_READ, NULL);
dout("%s: rbd_req_sync_exec returned %d\n", __func__, ret);
if (ret < 0)
return ret;

*order = size_buf.order;
*snap_size = le64_to_cpu(size_buf.size);

dout(" snap_id 0x%016llx order = %u, snap_size = %llu\n",
(unsigned long long) snap_id, (unsigned int) *order,
(unsigned long long) *snap_size);

return 0;
}

static int rbd_dev_v2_image_size(struct rbd_device *rbd_dev)
{
return _rbd_dev_v2_snap_size(rbd_dev, CEPH_NOSNAP,
&rbd_dev->header.obj_order,
&rbd_dev->header.image_size);
}

/*
* Scan the rbd device's current snapshot list and compare it to the
* newly-received snapshot context. Remove any existing snapshots
Expand Down Expand Up @@ -2636,6 +2677,7 @@ static int rbd_dev_v1_probe(struct rbd_device *rbd_dev)
static int rbd_dev_v2_probe(struct rbd_device *rbd_dev)
{
size_t size;
int ret;

/*
* Image id was filled in by the caller. Record the header
Expand All @@ -2647,12 +2689,23 @@ static int rbd_dev_v2_probe(struct rbd_device *rbd_dev)
return -ENOMEM;
sprintf(rbd_dev->header_name, "%s%s",
RBD_HEADER_PREFIX, rbd_dev->image_id);

/* Get the size and object order for the image */

ret = rbd_dev_v2_image_size(rbd_dev);
if (ret < 0)
goto out_err;
rbd_dev->image_format = 2;

dout("discovered version 2 image, header name is %s\n",
rbd_dev->header_name);

return -ENOTSUPP;
out_err:
kfree(rbd_dev->header_name);
rbd_dev->header_name = NULL;

return ret;
}

/*
Expand Down

0 comments on commit 177c4ba

Please sign in to comment.