infra: move dent transfer prototypes to strategy

This commit is contained in:
Thomas Schoebel-Theuer 2020-09-14 14:23:28 +02:00 committed by Thomas Schoebel-Theuer
parent 7d55e6f02a
commit 1e5be3d1b9
5 changed files with 20 additions and 7 deletions

View File

@ -181,9 +181,6 @@ extern int _mars_recv_cmd(struct mars_socket *msock, struct mars_cmd *cmd, int l
_mars_recv_cmd(_sock_, _cmd_, __LINE__); \
})
extern int mars_send_dent_list(struct mars_socket *msock, struct list_head *anchor);
extern int mars_recv_dent_list(struct mars_socket *msock, struct list_head *anchor);
extern int mars_send_mref(struct mars_socket *msock, struct mref_object *mref, bool cork);
extern int mars_recv_mref(struct mars_socket *msock, struct mref_object *mref, struct mars_cmd *cmd);
extern int mars_send_cb(struct mars_socket *msock, struct mref_object *mref, bool cork);

View File

@ -528,7 +528,7 @@ int handler_thread(void *data)
old_proto_level = sock->s_common_proto_level;
down(&brick->socket_sem);
status = mars_send_dent_list(sock, &handler_global->dent_anchor);
status = mars_send_dent_list(handler_global, sock);
up(&brick->socket_sem);
if (status < 0) {

View File

@ -2617,7 +2617,7 @@ int peer_action_dent_list(struct mars_global *tmp_global,
MARS_DBG("fetching remote dentries from '%s' '%s'\n",
peer->peer, paths);
status = mars_recv_dent_list(&peer->socket, &tmp_global->dent_anchor);
status = mars_recv_dent_list(tmp_global, &peer->socket);
if (unlikely(status < 0))
goto free;

View File

@ -209,6 +209,12 @@ extern void mars_kill_dent(struct mars_global *global, struct mars_dent *dent);
extern void mars_free_dent(struct mars_global *global, struct mars_dent *dent);
extern void mars_free_dent_all(struct mars_global *global, struct list_head *anchor);
/* network transfer of dents */
struct mars_socket;
extern int mars_send_dent_list(struct mars_global *global, struct mars_socket *msock);
extern int mars_recv_dent_list(struct mars_global *global, struct mars_socket *msock);
// low-level brick instantiation
int mars_connect(struct mars_input *a, struct mars_output *b);

View File

@ -66,12 +66,15 @@ done:
return res;
}
int mars_send_dent_list(struct mars_socket *sock, struct list_head *anchor)
int mars_send_dent_list(struct mars_global *global, struct mars_socket *sock)
{
struct list_head *anchor;
struct list_head *tmp;
struct mars_dent *dent;
int status = 0;
down_read(&global->dent_mutex);
anchor = &global->dent_anchor;
for (tmp = anchor->next; tmp != anchor; tmp = tmp->next) {
dent = container_of(tmp, struct mars_dent, dent_link);
dent->d_proto = MARS_PROTO_LEVEL;
@ -82,15 +85,21 @@ int mars_send_dent_list(struct mars_socket *sock, struct list_head *anchor)
if (status >= 0) { // send EOR
status = mars_send_struct(sock, NULL, mars_dent_meta, false);
}
up_read(&global->dent_mutex);
return status;
}
EXPORT_SYMBOL_GPL(mars_send_dent_list);
int mars_recv_dent_list(struct mars_socket *sock, struct list_head *anchor)
int mars_recv_dent_list(struct mars_global *global, struct mars_socket *sock)
{
struct list_head *anchor;
int status;
down_write(&global->dent_mutex);
anchor = &global->dent_anchor;
for (;;) {
struct mars_dent *dent = brick_zmem_alloc(sizeof(struct mars_dent));
if (!dent)
return -ENOMEM;
@ -112,6 +121,7 @@ int mars_recv_dent_list(struct mars_socket *sock, struct list_head *anchor)
list_add_tail(&dent->dent_link, anchor);
}
done:
up_write(&global->dent_mutex);
return status;
}
EXPORT_SYMBOL_GPL(mars_recv_dent_list);