53 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Copyright (c) 2022-2024 Oracle. All Rights Reserved.4 * Author: Darrick J. Wong <djwong@kernel.org>5 */6#include "xfs.h"7#include "xfs_fs.h"8#include "xfs_shared.h"9#include "xfs_format.h"10#include "xfs_trans_resv.h"11#include "xfs_mount.h"12#include "xfs_ag.h"13#include "xfs_trace.h"14 15/* Initialize a notifier chain. */16void17xfs_hooks_init(18 struct xfs_hooks *chain)19{20 BLOCKING_INIT_NOTIFIER_HEAD(&chain->head);21}22 23/* Make it so a function gets called whenever we hit a certain hook point. */24int25xfs_hooks_add(26 struct xfs_hooks *chain,27 struct xfs_hook *hook)28{29 ASSERT(hook->nb.notifier_call != NULL);30 BUILD_BUG_ON(offsetof(struct xfs_hook, nb) != 0);31 32 return blocking_notifier_chain_register(&chain->head, &hook->nb);33}34 35/* Remove a previously installed hook. */36void37xfs_hooks_del(38 struct xfs_hooks *chain,39 struct xfs_hook *hook)40{41 blocking_notifier_chain_unregister(&chain->head, &hook->nb);42}43 44/* Call a hook. Returns the NOTIFY_* value returned by the last hook. */45int46xfs_hooks_call(47 struct xfs_hooks *chain,48 unsigned long val,49 void *priv)50{51 return blocking_notifier_call_chain(&chain->head, val, priv);52}53