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)