infra: introduce hash_table and hash_link

This commit is contained in:
Thomas Schoebel-Theuer 2019-03-12 20:42:47 +01:00 committed by Thomas Schoebel-Theuer
parent b1861be0a9
commit ee08ab587e
5 changed files with 18 additions and 0 deletions

View File

@ -385,10 +385,13 @@ int handler_thread(void *data)
bool ok = mars_get_socket(sock);
unsigned long statist_jiffies = jiffies;
int debug_nr;
int i;
int status = -EINVAL;
init_rwsem(&handler_global.dent_mutex);
init_rwsem(&handler_global.brick_mutex);
for (i = 0; i < MARS_GLOBAL_HASH; i++)
INIT_LIST_HEAD(&handler_global.dent_hash_anchor[i]);
MARS_DBG("#%d --------------- handler_thread starting on socket %p\n", sock->s_debug_nr, sock);
if (!ok)

View File

@ -2255,9 +2255,12 @@ int peer_thread(void *data)
struct mars_cmd cmd = {
.cmd_int1 = peer->maxdepth,
};
int i;
init_rwsem(&tmp_global.dent_mutex);
init_rwsem(&tmp_global.brick_mutex);
for (i = 0; i < MARS_GLOBAL_HASH; i++)
INIT_LIST_HEAD(&tmp_global.dent_hash_anchor[i]);
if (likely(repeated)) {
report_peer_connection(peer_pairs, !peer->do_communicate);
@ -5911,10 +5914,13 @@ static int _main_thread(void *data)
{
long long last_rollover = jiffies;
char *id = my_id();
int i;
int status = 0;
init_rwsem(&_global.dent_mutex);
init_rwsem(&_global.brick_mutex);
for (i = 0; i < MARS_GLOBAL_HASH; i++)
INIT_LIST_HEAD(&_global.dent_hash_anchor[i]);
mars_global = &_global;

View File

@ -68,6 +68,7 @@ extern char *my_id(void);
#define MARS_DENT(TYPE) \
struct list_head dent_link; \
struct list_head dent_hash_link; \
struct list_head dent_quick_link; \
struct list_head brick_list; \
struct TYPE *d_parent; \
@ -103,6 +104,8 @@ struct mars_dent {
extern const struct meta mars_kstat_meta[];
extern const struct meta mars_dent_meta[];
#define MARS_GLOBAL_HASH 32
struct mars_global {
struct rw_semaphore dent_mutex;
struct rw_semaphore brick_mutex;
@ -111,6 +114,7 @@ struct mars_global {
struct list_head dent_quick_anchor;
struct list_head brick_anchor;
wait_queue_head_t main_event;
struct list_head dent_hash_anchor[MARS_GLOBAL_HASH];
int global_version;
int deleted_my_border;
int old_deleted_my_border;

View File

@ -1339,6 +1339,7 @@ int mars_filler(void *__buf, const char *name, int namlen, loff_t offset,
newpath = NULL;
INIT_LIST_HEAD(&dent->dent_link);
INIT_LIST_HEAD(&dent->dent_hash_link);
INIT_LIST_HEAD(&dent->dent_quick_link);
INIT_LIST_HEAD(&dent->brick_list);
@ -1691,6 +1692,7 @@ void mars_kill_dent(struct mars_global *global, struct mars_dent *dent)
if (global)
down_write(&global->dent_mutex);
list_del_init(&dent->dent_link);
list_del_init(&dent->dent_hash_link);
list_del_init(&dent->dent_quick_link);
if (global)
up_write(&global->dent_mutex);
@ -1708,6 +1710,7 @@ void mars_free_dent(struct mars_global *global, struct mars_dent *dent)
mars_kill_dent(global, dent);
CHECK_HEAD_EMPTY(&dent->dent_link);
CHECK_HEAD_EMPTY(&dent->dent_hash_link);
CHECK_HEAD_EMPTY(&dent->dent_quick_link);
CHECK_HEAD_EMPTY(&dent->brick_list);
@ -1753,6 +1756,7 @@ void mars_free_dent_all(struct mars_global *global, struct list_head *anchor)
dent = container_of(tmp_list.prev, struct mars_dent, dent_link);
list_del_init(&dent->dent_link);
list_del_init(&dent->dent_hash_link);
list_del_init(&dent->dent_quick_link);
MARS_IO("freeing dent %p\n", dent);
mars_free_dent(global, dent);

View File

@ -95,6 +95,7 @@ int mars_recv_dent_list(struct mars_socket *sock, struct list_head *anchor)
//MARS_IO("\n");
INIT_LIST_HEAD(&dent->dent_link);
INIT_LIST_HEAD(&dent->dent_hash_link);
INIT_LIST_HEAD(&dent->dent_quick_link);
INIT_LIST_HEAD(&dent->brick_list);