#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/sched/task.h>
#include <linux/binfmts.h>
#include <linux/syscalls.h>
#include <linux/unistd.h>
#include <linux/kmod.h>
#include <linux/slab.h>
#include <linux/completion.h>
#include <linux/cred.h>
#include <linux/file.h>
#include <linux/fdtable.h>
#include <linux/workqueue.h>
#include <linux/security.h>
#include <linux/mount.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/resource.h>
#include <linux/notifier.h>
#include <linux/suspend.h>
#include <linux/rwsem.h>
#include <linux/ptrace.h>
#include <linux/async.h>
#include <linux/uaccess.h>
#include "internal.h"
#undef MODULE_PARAM_PREFIX
#define MODULE_PARAM_PREFIX …
static bool enable_dups_trace = … IS_ENABLED(…);
module_param(enable_dups_trace, bool_enable_only, 0644);
static DEFINE_MUTEX(kmod_dup_mutex);
static LIST_HEAD(dup_kmod_reqs);
struct kmod_dup_req { … };
static struct kmod_dup_req *kmod_dup_request_lookup(char *module_name)
{ … }
static void kmod_dup_request_delete(struct work_struct *work)
{ … }
static void kmod_dup_request_complete(struct work_struct *work)
{ … }
bool kmod_dup_request_exists_wait(char *module_name, bool wait, int *dup_ret)
{ … }
void kmod_dup_request_announce(char *module_name, int ret)
{ … }