git: f5f50ec15688 - stable/13 - MFC ab6d9aaed76e: Move business logic from rebuild_fd_callout() into rebuild_fd().
Rob Wing
rob.fx907 at gmail.com
Thu Feb 4 22:59:41 UTC 2021
I’m not opinionated on this, only pointing out that most MFC commits lately
have trended towards using git cherry-pick and dropping the MFC: xxxxxx in
the commit message.
I know Warner encourages this, as documented at
https://github.com/bsdimp/freebsd-git-docs/blob/main/MFC.md#marking-mfcs
-Rob
On Thursday, February 4, 2021, Alexander V. Chernikov <melifaro at freebsd.org>
wrote:
> The branch stable/13 has been updated by melifaro:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=
> f5f50ec15688d6aab67d3fb8fb0c98b89e4dbce0
>
> commit f5f50ec15688d6aab67d3fb8fb0c98b89e4dbce0
> Author: Alexander V. Chernikov <melifaro at FreeBSD.org>
> AuthorDate: 2021-01-30 22:32:42 +0000
> Commit: Alexander V. Chernikov <melifaro at FreeBSD.org>
> CommitDate: 2021-02-04 22:34:15 +0000
>
> MFC ab6d9aaed76e: Move business logic from rebuild_fd_callout() into
> rebuild_fd().
>
> This simplifies code a bit and allows for future non-callout
> callers to request rebuild.
> ---
> sys/net/route/fib_algo.c | 40 +++++++++++++++++++++++++---------------
> 1 file changed, 25 insertions(+), 15 deletions(-)
>
> diff --git a/sys/net/route/fib_algo.c b/sys/net/route/fib_algo.c
> index 1f040ad259c5..f7a8b3f82431 100644
> --- a/sys/net/route/fib_algo.c
> +++ b/sys/net/route/fib_algo.c
> @@ -155,6 +155,7 @@ struct fib_data {
> TAILQ_ENTRY(fib_data) entries; /* list of all fds in vnet
> */
> };
>
> +static bool rebuild_fd(struct fib_data *fd);
> static void rebuild_fd_callout(void *_data);
> static void destroy_fd_instance_epoch(epoch_context_t ctx);
> static enum flm_op_result attach_datapath(struct fib_data *fd);
> @@ -1011,13 +1012,28 @@ setup_fd_instance(struct fib_lookup_module *flm,
> struct rib_head *rh,
> static void
> rebuild_fd_callout(void *_data)
> {
> - struct fib_data *fd, *fd_new, *fd_tmp;
> + struct fib_data *fd = (struct fib_data *)_data;
> +
> + FD_PRINTF(LOG_INFO, fd, "running callout rebuild");
> +
> + CURVNET_SET(fd->fd_vnet);
> + rebuild_fd(fd);
> + CURVNET_RESTORE();
> +}
> +
> +/*
> + * Tries to create new algo instance based on @fd data.
> + * Returns true on success.
> + */
> +static bool
> +rebuild_fd(struct fib_data *fd)
> +{
> + struct fib_data *fd_new, *fd_tmp;
> struct fib_lookup_module *flm_new = NULL;
> struct epoch_tracker et;
> enum flm_op_result result;
> bool need_rebuild = false;
>
> - fd = (struct fib_data *)_data;
>
> FIB_MOD_LOCK();
> need_rebuild = fd->fd_need_rebuild;
> @@ -1026,15 +1042,12 @@ rebuild_fd_callout(void *_data)
> fd->fd_num_changes = 0;
> FIB_MOD_UNLOCK();
>
> - CURVNET_SET(fd->fd_vnet);
> -
> /* First, check if we're still OK to use this algo */
> if (!is_algo_fixed(fd->fd_rh))
> flm_new = fib_check_best_algo(fd->fd_rh, fd->fd_flm);
> if ((flm_new == NULL) && (!need_rebuild)) {
> /* Keep existing algo, no need to rebuild. */
> - CURVNET_RESTORE();
> - return;
> + return (true);
> }
>
> if (flm_new == NULL) {
> @@ -1051,19 +1064,16 @@ rebuild_fd_callout(void *_data)
> }
> if (result != FLM_SUCCESS) {
> FD_PRINTF(LOG_NOTICE, fd, "table rebuild failed");
> - CURVNET_RESTORE();
> - return;
> + return (false);
> }
> FD_PRINTF(LOG_INFO, fd_new, "switched to new instance");
>
> - /* Remove old instance removal */
> - if (fd != NULL) {
> - NET_EPOCH_ENTER(et);
> - schedule_destroy_fd_instance(fd, true);
> - NET_EPOCH_EXIT(et);
> - }
> + /* Remove old instance */
> + NET_EPOCH_ENTER(et);
> + schedule_destroy_fd_instance(fd, true);
> + NET_EPOCH_EXIT(et);
>
> - CURVNET_RESTORE();
> + return (true);
> }
>
> /*
>
More information about the dev-commits-src-all
mailing list