* [PATCH] Introduce immediate_dev_node flag for dm tree items to support immediate node creation on demand
@ 2010-06-08 12:27 Peter Rajnoha
2010-06-08 13:11 ` Peter Rajnoha
2010-06-17 22:15 ` Jonathan Brassow
0 siblings, 2 replies; 3+ messages in thread
From: Peter Rajnoha @ 2010-06-08 12:27 UTC (permalink / raw)
To: lvm-devel
Sometimes we need the nodes to be visible in /dev/mapper even during processing a tree,
just like we need in case of processing mirrors in clustered environment by cmirror daemon
(rhbz #568137). Normally, we synchronize with udev and create nodes (as a fallback, if
udev has not done so yet) at the end of processing the whole tree only.
So let's use a flag (or "load_property") called "immediate_dev_node" for such a dm tree
node which triggers immediate synchronisation with udev and node creation when needed.
(Unfortunately, this still does not solve the problem with searching the right node
by comparing the whole /dev/mapper content since we do not have a name provided in
dm log request sent from kernel which cmirror daemon tries to process.)
Peter
---
libdm/libdm-deptree.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
index e1813b4..38565e5 100644
--- a/libdm/libdm-deptree.c
+++ b/libdm/libdm-deptree.c
@@ -143,6 +143,13 @@ struct load_properties {
struct dm_list segs;
const char *new_name;
+
+ /* If immediate_dev_node is set to 1, try to create the dev node
+ * as soon as possible (e.g. in preload stage even during traversal
+ * and processing of dm tree). This will also flush all stacked dev
+ * node operations, synchronizing with udev.
+ */
+ int immediate_dev_node;
};
/* Two of these used to join two nodes with uses and used_by. */
@@ -1843,6 +1850,7 @@ int dm_tree_preload_children(struct dm_tree_node *dnode,
void *handle = NULL;
struct dm_tree_node *child;
struct dm_info newinfo;
+ int update_devs_flag = 0;
/* Preload children first */
while ((child = dm_tree_next_child(&handle, dnode, 0))) {
@@ -1897,10 +1905,26 @@ int dm_tree_preload_children(struct dm_tree_node *dnode,
/* Update cached info */
child->info = newinfo;
+
+ /*
+ * Prepare for immediate synchronization with udev and flush all stacked
+ * dev node operations if requested by immediate_dev_node property. But
+ * finish processing current level in the tree first.
+ */
+ if (child->props.immediate_dev_node)
+ update_devs_flag = 1;
+
}
handle = NULL;
+ if (update_devs_flag) {
+ if (!dm_udev_wait(dm_tree_get_cookie(dnode)))
+ stack;
+ dm_tree_set_cookie(dnode, 0);
+ dm_task_update_nodes();
+ }
+
return r;
}
@@ -2157,6 +2181,9 @@ int dm_tree_node_add_mirror_target_log(struct dm_tree_node *node,
return 0;
}
+ if (clustered)
+ log_node->props.immediate_dev_node = 1;
+
if (!_link_tree_nodes(node, log_node))
return_0;
}
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] Introduce immediate_dev_node flag for dm tree items to support immediate node creation on demand
2010-06-08 12:27 [PATCH] Introduce immediate_dev_node flag for dm tree items to support immediate node creation on demand Peter Rajnoha
@ 2010-06-08 13:11 ` Peter Rajnoha
2010-06-17 22:15 ` Jonathan Brassow
1 sibling, 0 replies; 3+ messages in thread
From: Peter Rajnoha @ 2010-06-08 13:11 UTC (permalink / raw)
To: lvm-devel
On 06/08/2010 02:27 PM, Peter Rajnoha wrote:
> So let's use a flag (or "load_property") called "immediate_dev_node" for such a dm tree
> node which triggers immediate synchronisation with udev and node creation when needed.
Just one thing to add. For now, the flag is checked for in
dm_tree_preload_children only! It's debatable whether we need
something like that in dm_tree_{activate, deactivate}_children...
And if yes, do we need to differentiate among these situations?
Peter
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] Introduce immediate_dev_node flag for dm tree items to support immediate node creation on demand
2010-06-08 12:27 [PATCH] Introduce immediate_dev_node flag for dm tree items to support immediate node creation on demand Peter Rajnoha
2010-06-08 13:11 ` Peter Rajnoha
@ 2010-06-17 22:15 ` Jonathan Brassow
1 sibling, 0 replies; 3+ messages in thread
From: Jonathan Brassow @ 2010-06-17 22:15 UTC (permalink / raw)
To: lvm-devel
Seems like a reasonable solution to the problem we are having.
ACK
brassow
On Jun 8, 2010, at 7:27 AM, Peter Rajnoha wrote:
> Sometimes we need the nodes to be visible in /dev/mapper even during
> processing a tree,
> just like we need in case of processing mirrors in clustered
> environment by cmirror daemon
> (rhbz #568137). Normally, we synchronize with udev and create nodes
> (as a fallback, if
> udev has not done so yet) at the end of processing the whole tree
> only.
>
> So let's use a flag (or "load_property") called "immediate_dev_node"
> for such a dm tree
> node which triggers immediate synchronisation with udev and node
> creation when needed.
>
> (Unfortunately, this still does not solve the problem with searching
> the right node
> by comparing the whole /dev/mapper content since we do not have a
> name provided in
> dm log request sent from kernel which cmirror daemon tries to
> process.)
>
> Peter
> ---
>
> libdm/libdm-deptree.c | 27 +++++++++++++++++++++++++++
> 1 files changed, 27 insertions(+), 0 deletions(-)
>
> diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
> index e1813b4..38565e5 100644
> --- a/libdm/libdm-deptree.c
> +++ b/libdm/libdm-deptree.c
> @@ -143,6 +143,13 @@ struct load_properties {
> struct dm_list segs;
>
> const char *new_name;
> +
> + /* If immediate_dev_node is set to 1, try to create the dev node
> + * as soon as possible (e.g. in preload stage even during traversal
> + * and processing of dm tree). This will also flush all stacked dev
> + * node operations, synchronizing with udev.
> + */
> + int immediate_dev_node;
> };
>
> /* Two of these used to join two nodes with uses and used_by. */
> @@ -1843,6 +1850,7 @@ int dm_tree_preload_children(struct
> dm_tree_node *dnode,
> void *handle = NULL;
> struct dm_tree_node *child;
> struct dm_info newinfo;
> + int update_devs_flag = 0;
>
> /* Preload children first */
> while ((child = dm_tree_next_child(&handle, dnode, 0))) {
> @@ -1897,10 +1905,26 @@ int dm_tree_preload_children(struct
> dm_tree_node *dnode,
>
> /* Update cached info */
> child->info = newinfo;
> +
> + /*
> + * Prepare for immediate synchronization with udev and flush all
> stacked
> + * dev node operations if requested by immediate_dev_node
> property. But
> + * finish processing current level in the tree first.
> + */
> + if (child->props.immediate_dev_node)
> + update_devs_flag = 1;
> +
> }
>
> handle = NULL;
>
> + if (update_devs_flag) {
> + if (!dm_udev_wait(dm_tree_get_cookie(dnode)))
> + stack;
> + dm_tree_set_cookie(dnode, 0);
> + dm_task_update_nodes();
> + }
> +
> return r;
> }
>
> @@ -2157,6 +2181,9 @@ int dm_tree_node_add_mirror_target_log(struct
> dm_tree_node *node,
> return 0;
> }
>
> + if (clustered)
> + log_node->props.immediate_dev_node = 1;
> +
> if (!_link_tree_nodes(node, log_node))
> return_0;
> }
>
> --
> lvm-devel mailing list
> lvm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/lvm-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-06-17 22:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-08 12:27 [PATCH] Introduce immediate_dev_node flag for dm tree items to support immediate node creation on demand Peter Rajnoha
2010-06-08 13:11 ` Peter Rajnoha
2010-06-17 22:15 ` Jonathan Brassow
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.