mirror of
https://github.com/schoebel/mars
synced 2025-03-11 07:47:41 +00:00
net: do corking at mars_send_mref()
This commit is contained in:
parent
5b2cad9f6e
commit
9ed1d12ed9
@ -782,6 +782,7 @@ static int sender_thread(void *data)
|
||||
struct mref_object *mref;
|
||||
int min_nr;
|
||||
int max_nr;
|
||||
bool cork;
|
||||
|
||||
// timeouting is a rather expensive operation, don't do it too often
|
||||
if (do_timeout) {
|
||||
@ -828,6 +829,7 @@ static int sender_thread(void *data)
|
||||
}
|
||||
list_del_init(tmp);
|
||||
// notice: hash_head remains in its list!
|
||||
cork = !list_empty(&output->mref_list);
|
||||
traced_unlock(&output->lock, flags);
|
||||
|
||||
mref_a = container_of(tmp, struct client_mref_aspect, io_head);
|
||||
@ -873,7 +875,7 @@ static int sender_thread(void *data)
|
||||
// notice: hash_head is already there!
|
||||
spin_unlock(&output->lock);
|
||||
|
||||
status = mars_send_mref(&ch->socket, mref);
|
||||
status = mars_send_mref(&ch->socket, mref, cork);
|
||||
if (unlikely(status < 0)) {
|
||||
_hash_insert(output, mref_a);
|
||||
do_timeout = true;
|
||||
|
@ -1150,7 +1150,7 @@ const struct meta mars_cmd_meta[] = {
|
||||
EXPORT_SYMBOL_GPL(mars_cmd_meta);
|
||||
|
||||
|
||||
int mars_send_mref(struct mars_socket *msock, struct mref_object *mref)
|
||||
int mars_send_mref(struct mars_socket *msock, struct mref_object *mref, bool cork)
|
||||
{
|
||||
struct mars_cmd cmd = {
|
||||
.cmd_code = CMD_MREF,
|
||||
@ -1169,12 +1169,12 @@ int mars_send_mref(struct mars_socket *msock, struct mref_object *mref)
|
||||
goto done;
|
||||
|
||||
seq = 0;
|
||||
status = desc_send_struct(msock, mref, mars_mref_meta, cmd.cmd_code & CMD_FLAG_HAS_DATA);
|
||||
status = desc_send_struct(msock, mref, mars_mref_meta, cork || cmd.cmd_code & CMD_FLAG_HAS_DATA);
|
||||
if (status < 0)
|
||||
goto done;
|
||||
|
||||
if (cmd.cmd_code & CMD_FLAG_HAS_DATA) {
|
||||
status = mars_send_raw(msock, mref->ref_data, mref->ref_len, false);
|
||||
status = mars_send_raw(msock, mref->ref_data, mref->ref_len, cork);
|
||||
}
|
||||
done:
|
||||
return status;
|
||||
|
@ -144,7 +144,7 @@ extern int _mars_recv_struct(struct mars_socket *msock, void *data, const struct
|
||||
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);
|
||||
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);
|
||||
extern int mars_recv_cb(struct mars_socket *msock, struct mref_object *mref, struct mars_cmd *cmd);
|
||||
|
Loading…
Reference in New Issue
Block a user