|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 12/17] xen/hypfs: add new enter() and exit() per node callbacks
On 01.12.2020 09:21, Juergen Gross wrote:
> In order to better support resource allocation and locking for dynamic
> hypfs nodes add enter() and exit() callbacks to struct hypfs_funcs.
>
> The enter() callback is called when entering a node during hypfs user
> actions (traversing, reading or writing it), while the exit() callback
> is called when leaving a node (accessing another node at the same or a
> higher directory level, or when returning to the user).
>
> For avoiding recursion this requires a parent pointer in each node.
> Let the enter() callback return the entry address which is stored as
> the last accessed node in order to be able to use a template entry for
> that purpose in case of dynamic entries.
I guess I'll learn in subsequent patches why this is necessary /
useful. Right now it looks odd for the function to simple return
the incoming argument, as this way it's clear the caller knows
the correct value already.
> @@ -100,11 +112,58 @@ static void hypfs_unlock(void)
> }
> }
>
> +const struct hypfs_entry *hypfs_node_enter(const struct hypfs_entry *entry)
> +{
> + return entry;
> +}
> +
> +void hypfs_node_exit(const struct hypfs_entry *entry)
> +{
> +}
> +
> +static int node_enter(const struct hypfs_entry *entry)
> +{
> + const struct hypfs_entry **last = &this_cpu(hypfs_last_node_entered);
> +
> + entry = entry->funcs->enter(entry);
> + if ( IS_ERR(entry) )
> + return PTR_ERR(entry);
> +
> + ASSERT(!*last || *last == entry->parent);
> +
> + *last = entry;
> +
> + return 0;
> +}
> +
> +static void node_exit(const struct hypfs_entry *entry)
> +{
> + const struct hypfs_entry **last = &this_cpu(hypfs_last_node_entered);
> +
> + if ( !*last )
> + return;
Under what conditions is this legitimate to happen? IOW shouldn't
there be an ASSERT_UNREACHABLE() here?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |