提交 8b0241f8 编写于 作者: A Alex Elder 提交者: Sage Weil

rbd: have snap_by_name() return a snapshot

A function called snap_by_name() ought to just look up a snapshot by
name.  It does that, but then it assigns some stuff to the rbd
device structure as well.

Change the function to do just the lookup, and have the caller do
the assignments that follow.
Signed-off-by: NAlex Elder <elder@inktank.com>
Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
上级 5655c4d9
...@@ -830,44 +830,39 @@ static const char *rbd_snap_name(struct rbd_device *rbd_dev, u64 snap_id) ...@@ -830,44 +830,39 @@ static const char *rbd_snap_name(struct rbd_device *rbd_dev, u64 snap_id)
return NULL; return NULL;
} }
static int snap_by_name(struct rbd_device *rbd_dev, const char *snap_name) static struct rbd_snap *snap_by_name(struct rbd_device *rbd_dev,
const char *snap_name)
{ {
struct rbd_snap *snap; struct rbd_snap *snap;
list_for_each_entry(snap, &rbd_dev->snaps, node) { list_for_each_entry(snap, &rbd_dev->snaps, node)
if (!strcmp(snap_name, snap->name)) { if (!strcmp(snap_name, snap->name))
rbd_dev->spec->snap_id = snap->id; return snap;
rbd_dev->mapping.size = snap->size;
rbd_dev->mapping.features = snap->features;
return 0;
}
}
return -ENOENT; return NULL;
} }
static int rbd_dev_set_mapping(struct rbd_device *rbd_dev) static int rbd_dev_set_mapping(struct rbd_device *rbd_dev)
{ {
int ret;
if (!memcmp(rbd_dev->spec->snap_name, RBD_SNAP_HEAD_NAME, if (!memcmp(rbd_dev->spec->snap_name, RBD_SNAP_HEAD_NAME,
sizeof (RBD_SNAP_HEAD_NAME))) { sizeof (RBD_SNAP_HEAD_NAME))) {
rbd_dev->spec->snap_id = CEPH_NOSNAP; rbd_dev->spec->snap_id = CEPH_NOSNAP;
rbd_dev->mapping.size = rbd_dev->header.image_size; rbd_dev->mapping.size = rbd_dev->header.image_size;
rbd_dev->mapping.features = rbd_dev->header.features; rbd_dev->mapping.features = rbd_dev->header.features;
ret = 0;
} else { } else {
ret = snap_by_name(rbd_dev, rbd_dev->spec->snap_name); struct rbd_snap *snap;
if (ret < 0)
goto done; snap = snap_by_name(rbd_dev, rbd_dev->spec->snap_name);
if (!snap)
return -ENOENT;
rbd_dev->spec->snap_id = snap->id;
rbd_dev->mapping.size = snap->size;
rbd_dev->mapping.features = snap->features;
rbd_dev->mapping.read_only = true; rbd_dev->mapping.read_only = true;
} }
set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags);
done: return 0;
return ret;
} }
static void rbd_header_free(struct rbd_image_header *header) static void rbd_header_free(struct rbd_image_header *header)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册