Mercurial > nomad
changeset 594:da309438b086
objstore: add import volume vdev op
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Sat, 02 Mar 2019 21:02:57 -0500 |
parents | 5979d6a3d41c |
children | 10364796fb99 |
files | src/objstore/include/nomad/objstore_backend.h src/objstore/vol.c |
diffstat | 2 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/objstore/include/nomad/objstore_backend.h Sat Mar 02 20:56:47 2019 -0500 +++ b/src/objstore/include/nomad/objstore_backend.h Sat Mar 02 21:02:57 2019 -0500 @@ -165,6 +165,7 @@ int (*create_vol)(struct objstore *vol); int (*import_vdev)(struct objstore_vdev *vdev, struct xuuid **vols); + int (*import_vol)(struct objstore *vol); }; extern struct objver *obj_add_version(struct obj *obj,
--- a/src/objstore/vol.c Sat Mar 02 20:56:47 2019 -0500 +++ b/src/objstore/vol.c Sat Mar 02 21:02:57 2019 -0500 @@ -190,7 +190,32 @@ int objstore_vol_import(struct objstore_vdev *vdev, struct xuuid *id) { - return -ENOTSUP; + struct objstore *vol; + int ret; + + if (!vdev->def->import_vol) + return -ENOTSUP; + + vol = vol_alloc(vdev, "<imported>"); + if (IS_ERR(vol)) + return PTR_ERR(vol); + + vol->id = *id; + + ret = vdev->def->import_vol(vol); + if (ret) + goto err; + + MXLOCK(&loaded_vols.lock); + rb_add(&loaded_vols.tree, vol); + MXUNLOCK(&loaded_vols.lock); + + return 0; + +err: + vol_free(vol); + + return ret; } struct objstore *objstore_vol_lookup(const struct xuuid *volid)