PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /usr/src/file_protector-1.1-1592/
Server: Linux ituca148.hostpapavps.net 4.18.0-553.141.2.el8_10.x86_64 #1 SMP Wed Jul 8 10:28:18 EDT 2026 x86_64
IP: 216.7.89.187
Choose File :

Url:
Dir : //usr/src/file_protector-1.1-1592/lru_hashtable.h

/**
@file     lru_hashtable.h
@brief    LRU hashtable header file
@details  Copyright (c) 2026 Acronis International GmbH
@author   Bruce Wang (bruce.wang@acronis.com)
@since    $Id: $
*/

#pragma once

#include <linux/dcache.h>
#include <linux/fs.h>

#include "hashtable_compat.h"
#include "si_common.h"
#include "task_info_map.h"
#include "transport_protocol.h"

typedef struct PACKED
{
	uint64_t caller_pid_version;
	uint64_t target_pid_version;
	SiProcfsAccessType access_type;
} lru_hashtable_procfs_key_t;

typedef struct PACKED
{
	uint64_t caller_pid_version;
	uint64_t target_pid_version;
	int32_t access_mode;
} lru_hashtable_ptrace_key_t;

typedef enum _hashtable_key_type
{
	LRU_HASHTABLE_KEY_TYPE_PROCFS,
	LRU_HASHTABLE_KEY_TYPE_PTRACE,
} lru_hashtable_key_type_t;

typedef union _lru_hashtable_key
{
	lru_hashtable_procfs_key_t procfs_key;
	lru_hashtable_ptrace_key_t ptrace_key;
} lru_hashtable_key_t;

#define LRU_TABLE_SIZE_BITS 15

typedef struct lru_hashtable_manager
{
	struct mutex table_writer_lock;
	bool active;
	ssize_t entries_count;
	// Entry per caller + callee as a key.
	DECLARE_HASHTABLE(seen_entries_hashtable, LRU_TABLE_SIZE_BITS);
	struct list_head seen_entries_lru_list;
} lru_hashtable_manager_t;

int lru_hashtable_manager_init(struct lru_hashtable_manager **out_manager);
void lru_hashtable_manager_deinit(struct lru_hashtable_manager *manager);
void lru_hashtable_manager_activate(struct lru_hashtable_manager *manager);
void lru_hashtable_manager_deactivate(struct lru_hashtable_manager *manager);
bool lru_hashtable_manager_key_exist(struct lru_hashtable_manager *manager, const lru_hashtable_key_t *key, lru_hashtable_key_type_t key_type);