public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
* LVM2/lib commands/toolcontext.c metadata/segty ...
@ 2011-08-25 10:00 zkabelac
0 siblings, 0 replies; only message in thread
From: zkabelac @ 2011-08-25 10:00 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: zkabelac@sourceware.org 2011-08-25 10:00:09
Modified files:
lib/commands : toolcontext.c
lib/metadata : segtype.h
lib/thin : thin.c
Log message:
Add registration of thin_pool segment
Register thin and thin_pool segment via multiple_segtypes.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/commands/toolcontext.c.diff?cvsroot=lvm2&r1=1.129&r2=1.130
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/segtype.h.diff?cvsroot=lvm2&r1=1.38&r2=1.39
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/thin/thin.c.diff?cvsroot=lvm2&r1=1.1&r2=1.2
--- LVM2/lib/commands/toolcontext.c 2011/08/24 13:41:47 1.129
+++ LVM2/lib/commands/toolcontext.c 2011/08/25 10:00:09 1.130
@@ -1030,6 +1030,11 @@
return 0;
#endif
+#ifdef THIN_INTERNAL
+ if (!init_thin_segtypes(cmd, &seglib))
+ return 0;
+#endif
+
#ifdef HAVE_LIBDL
/* Load any formats in shared libs unless static */
if (!is_static() &&
--- LVM2/lib/metadata/segtype.h 2011/08/24 13:41:46 1.38
+++ LVM2/lib/metadata/segtype.h 2011/08/25 10:00:09 1.39
@@ -40,6 +40,7 @@
#define SEG_REPLICATOR_DEV 0x00000200U
#define SEG_RAID 0x00000400U
#define SEG_THIN 0x00000800U
+#define SEG_THIN_POOL 0x00001000U
#define SEG_UNKNOWN 0x80000000U
#define seg_is_mirrored(seg) ((seg)->segtype->flags & SEG_AREAS_MIRRORED ? 1 : 0)
@@ -50,6 +51,7 @@
#define seg_is_virtual(seg) ((seg)->segtype->flags & SEG_VIRTUAL ? 1 : 0)
#define seg_is_raid(seg) ((seg)->segtype->flags & SEG_RAID ? 1 : 0)
#define seg_is_thin(seg) ((seg)->segtype->flags & SEG_THIN ? 1 : 0)
+#define seg_is_thin_pool(seg) ((seg)->segtype->flags & SEG_THIN_POOL ? 1 : 0)
#define seg_can_split(seg) ((seg)->segtype->flags & SEG_CAN_SPLIT ? 1 : 0)
#define seg_cannot_be_zeroed(seg) ((seg)->segtype->flags & SEG_CANNOT_BE_ZEROED ? 1 : 0)
#define seg_monitored(seg) ((seg)->segtype->flags & SEG_MONITORED ? 1 : 0)
@@ -59,6 +61,7 @@
#define segtype_is_mirrored(segtype) ((segtype)->flags & SEG_AREAS_MIRRORED ? 1 : 0)
#define segtype_is_raid(segtype) ((segtype)->flags & SEG_RAID ? 1 : 0)
#define segtype_is_thin(segtype) ((segtype)->flags & SEG_THIN ? 1 : 0)
+#define segtype_is_thin_pool(segtype) ((segtype)->flags & SEG_THIN_POOL ? 1 : 0)
#define segtype_is_virtual(segtype) ((segtype)->flags & SEG_VIRTUAL ? 1 : 0)
struct segment_type {
@@ -137,6 +140,10 @@
int init_replicator_segtype(struct cmd_context *cmd, struct segtype_library *seglib);
#endif
+#ifdef THIN_INTERNAL
+int init_thin_segtypes(struct cmd_context *cmd, struct segtype_library *seglib);
+#endif
+
#ifdef SNAPSHOT_INTERNAL
struct segment_type *init_snapshot_segtype(struct cmd_context *cmd);
#endif
@@ -149,8 +156,4 @@
struct segment_type *init_crypt_segtype(struct cmd_context *cmd);
#endif
-#ifdef THIN_INTERNAL
-struct segment_type *init_thin_segtype(struct cmd_context *cmd);
-#endif
-
#endif
--- LVM2/lib/thin/thin.c 2011/08/24 08:27:51 1.1
+++ LVM2/lib/thin/thin.c 2011/08/25 10:00:09 1.2
@@ -30,6 +30,22 @@
/* Dm kernel module name for thin provisiong */
#define THIN_MODULE "thin-pool"
+static const char *_thin_pool_name(const struct lv_segment *seg)
+{
+ return seg->segtype->name;
+}
+
+
+static int _thin_pool_text_import(struct lv_segment *seg, const struct config_node *sn,
+ struct dm_hash_table *pv_hash __attribute__((unused)))
+{
+ return 1;
+}
+
+static int _thin_pool_text_export(const struct lv_segment *seg, struct formatter *f)
+{
+ return 1;
+}
static const char *_thin_name(const struct lv_segment *seg)
{
@@ -67,7 +83,7 @@
static int _present = 0;
if (!_checked) {
- _present = target_present(cmd, "thin-pool", 1);
+ _present = target_present(cmd, THIN_MODULE, 1);
_checked = 1;
}
@@ -93,6 +109,14 @@
dm_free(segtype);
}
+static struct segtype_handler _thin_pool_ops = {
+ .name = _thin_pool_name,
+ .text_import = _thin_pool_text_import,
+ .text_export = _thin_pool_text_export,
+ .modules_needed = _thin_modules_needed,
+ .destroy = _thin_destroy,
+};
+
static struct segtype_handler _thin_ops = {
.name = _thin_name,
.text_import = _thin_text_import,
@@ -106,30 +130,48 @@
};
#ifdef THIN_INTERNAL
-struct segment_type *init_thin_segtype(struct cmd_context *cmd)
-#else /* Shared */
-struct segment_type *init_segtype(struct cmd_context *cmd);
-struct segment_type *init_segtype(struct cmd_context *cmd)
+int init_thin_segtypes(struct cmd_context *cmd, struct segtype_library *seglib)
+#else /* Shared */
+int init_multiple_segtypes(struct cmd_context *cmd, struct segtype_library *seglib);
+int init_multiple_segtypes(struct cmd_context *cmd, struct segtype_library *seglib)
#endif
{
- struct segment_type *segtype = dm_zalloc(sizeof(*segtype));
-
- if (!segtype)
- return_NULL;
-
- segtype->cmd = cmd;
- segtype->ops = &_thin_ops;
- segtype->name = "thin";
- segtype->private = NULL;
- segtype->flags = SEG_THIN;
+ static const struct {
+ struct segtype_handler *ops;
+ const char name[16];
+ uint32_t flags;
+ } reg_segtypes[] = {
+ { &_thin_pool_ops, "thin_pool", SEG_THIN_POOL },
+ { &_thin_ops, "thin", SEG_THIN }
+ };
+
+ struct segment_type *segtype;
+ unsigned i;
+
+ for (i = 0; i < sizeof(reg_segtypes)/sizeof(reg_segtypes[0]); ++i) {
+ segtype = dm_zalloc(sizeof(*segtype));
+
+ if (!segtype) {
+ log_error("Failed to allocate memory for %s segtype",
+ reg_segtypes[i].name);
+ return 0;
+ }
+
+ segtype->ops = reg_segtypes[i].ops;
+ segtype->name = reg_segtypes[i].name;
+ segtype->flags = reg_segtypes[i].flags;
#ifdef DEVMAPPER_SUPPORT
# ifdef DMEVENTD
- if (_get_thin_dso_path(cmd))
- segtype->flags |= SEG_MONITORED;
+ if (_get_thin_dso_path(cmd))
+ segtype->flags |= SEG_MONITORED;
# endif /* DMEVENTD */
#endif
- log_very_verbose("Initialised segtype: %s", segtype->name);
+ if (!lvm_register_segtype(seglib, segtype))
+ return_0;
- return segtype;
+ log_very_verbose("Initialised segtype: %s", segtype->name);
+ }
+
+ return 1;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-08-25 10:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-25 10:00 LVM2/lib commands/toolcontext.c metadata/segty zkabelac
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).