rbd: use a single value of snap_name to mean no snap

There's already a constant for this anyway.

Since rbd_header_set_snap() is only used to set the rbd device
snap_name field, just do that within that function rather than
having it take the snap_name as an argument.

Signed-off-by: Alex Elder <elder@dreamhost.com>
Signed-off-by: Sage Weil <sage@newdream.net>

v2: Changed interface rbd_header_set_snap() so it explicitly updates
    the snap_name in the rbd_device.  Also added a BUILD_BUG_ON()
    to verify the size of the snap_name field is sufficient for
    SNAP_HEAD_NAME.
This commit is contained in:
Josh Durgin 2011-11-21 18:19:13 -08:00 committed by Alex Elder
parent 1dbb439913
commit cc9d734c3d

View file

@ -553,20 +553,18 @@ static int snap_by_name(struct rbd_image_header *header, const char *snap_name,
return i; return i;
} }
static int rbd_header_set_snap(struct rbd_device *dev, static int rbd_header_set_snap(struct rbd_device *dev, u64 *size)
const char *snap_name,
u64 *size)
{ {
struct rbd_image_header *header = &dev->header; struct rbd_image_header *header = &dev->header;
struct ceph_snap_context *snapc = header->snapc; struct ceph_snap_context *snapc = header->snapc;
int ret = -ENOENT; int ret = -ENOENT;
BUILD_BUG_ON(sizeof (dev->snap_name) < sizeof (RBD_SNAP_HEAD_NAME));
down_write(&header->snap_rwsem); down_write(&header->snap_rwsem);
if (!snap_name || if (!memcmp(dev->snap_name, RBD_SNAP_HEAD_NAME,
!*snap_name || sizeof (RBD_SNAP_HEAD_NAME))) {
strcmp(snap_name, "-") == 0 ||
strcmp(snap_name, RBD_SNAP_HEAD_NAME) == 0) {
if (header->total_snaps) if (header->total_snaps)
snapc->seq = header->snap_seq; snapc->seq = header->snap_seq;
else else
@ -576,7 +574,7 @@ static int rbd_header_set_snap(struct rbd_device *dev,
if (size) if (size)
*size = header->image_size; *size = header->image_size;
} else { } else {
ret = snap_by_name(header, snap_name, &snapc->seq, size); ret = snap_by_name(header, dev->snap_name, &snapc->seq, size);
if (ret < 0) if (ret < 0)
goto done; goto done;
@ -1729,7 +1727,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
if (rc) if (rc)
return rc; return rc;
rc = rbd_header_set_snap(rbd_dev, rbd_dev->snap_name, &total_size); rc = rbd_header_set_snap(rbd_dev, &total_size);
if (rc) if (rc)
return rc; return rc;
@ -2215,7 +2213,8 @@ static ssize_t rbd_add(struct bus_type *bus,
} }
if (rbd_dev->snap_name[0] == 0) if (rbd_dev->snap_name[0] == 0)
rbd_dev->snap_name[0] = '-'; memcpy(rbd_dev->snap_name, RBD_SNAP_HEAD_NAME,
sizeof (RBD_SNAP_HEAD_NAME));
rbd_dev->obj_len = strlen(rbd_dev->obj); rbd_dev->obj_len = strlen(rbd_dev->obj);
snprintf(rbd_dev->obj_md_name, sizeof(rbd_dev->obj_md_name), "%s%s", snprintf(rbd_dev->obj_md_name, sizeof(rbd_dev->obj_md_name), "%s%s",