mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
smb: smbdirect: introduce smbdirect_connection_reassembly_{append,first}_recv_io()
These are basically copies of enqueue_reassembly() and [_]get_first_reassembly() of both client and server. The only difference is that enqueue_reassembly() of the server does not have: sc->statistics.enqueue_reassembly_queue++ Also smbdirect_connection_reassembly_first_recv_io() makes use of list_first_entry_or_null() in order to simplify the code. In the next commits they will replace the existing functions. Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: Namjae Jeon <linkinjeon@kernel.org> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Signed-off-by: Stefan Metzmacher <metze@samba.org> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
bb0a49edfe
commit
b90169bcb2
@@ -47,3 +47,38 @@ static void smbdirect_connection_put_recv_io(struct smbdirect_recv_io *msg)
|
||||
|
||||
queue_work(sc->workqueue, &sc->recv_io.posted.refill_work);
|
||||
}
|
||||
|
||||
__maybe_unused /* this is temporary while this file is included in others */
|
||||
static void smbdirect_connection_reassembly_append_recv_io(struct smbdirect_socket *sc,
|
||||
struct smbdirect_recv_io *msg,
|
||||
u32 data_length)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&sc->recv_io.reassembly.lock, flags);
|
||||
list_add_tail(&msg->list, &sc->recv_io.reassembly.list);
|
||||
sc->recv_io.reassembly.queue_length++;
|
||||
/*
|
||||
* Make sure reassembly_data_length is updated after list and
|
||||
* reassembly_queue_length are updated. On the dequeue side
|
||||
* reassembly_data_length is checked without a lock to determine
|
||||
* if reassembly_queue_length and list is up to date
|
||||
*/
|
||||
virt_wmb();
|
||||
sc->recv_io.reassembly.data_length += data_length;
|
||||
spin_unlock_irqrestore(&sc->recv_io.reassembly.lock, flags);
|
||||
sc->statistics.enqueue_reassembly_queue++;
|
||||
}
|
||||
|
||||
__maybe_unused /* this is temporary while this file is included in others */
|
||||
static struct smbdirect_recv_io *
|
||||
smbdirect_connection_reassembly_first_recv_io(struct smbdirect_socket *sc)
|
||||
{
|
||||
struct smbdirect_recv_io *msg;
|
||||
|
||||
msg = list_first_entry_or_null(&sc->recv_io.reassembly.list,
|
||||
struct smbdirect_recv_io,
|
||||
list);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user