#include <linux/net.h>
#include <linux/rcupdate.h>
#include <linux/sched/signal.h>
#include <linux/splice.h>
#include <net/sock.h>
#include <trace/events/sock.h>
#include "smc.h"
#include "smc_core.h"
#include "smc_cdc.h"
#include "smc_tx.h"
#include "smc_rx.h"
#include "smc_stats.h"
#include "smc_tracepoint.h"
static void smc_rx_wake_up(struct sock *sk)
{ … }
static int smc_rx_update_consumer(struct smc_sock *smc,
union smc_host_cursor cons, size_t len)
{ … }
static void smc_rx_update_cons(struct smc_sock *smc, size_t len)
{ … }
struct smc_spd_priv { … };
static void smc_rx_pipe_buf_release(struct pipe_inode_info *pipe,
struct pipe_buffer *buf)
{ … }
static const struct pipe_buf_operations smc_pipe_ops = …;
static void smc_rx_spd_release(struct splice_pipe_desc *spd,
unsigned int i)
{ … }
static int smc_rx_splice(struct pipe_inode_info *pipe, char *src, size_t len,
struct smc_sock *smc)
{ … }
static int smc_rx_data_available_and_no_splice_pend(struct smc_connection *conn)
{ … }
int smc_rx_wait(struct smc_sock *smc, long *timeo,
int (*fcrit)(struct smc_connection *conn))
{ … }
static int smc_rx_recv_urg(struct smc_sock *smc, struct msghdr *msg, int len,
int flags)
{ … }
static bool smc_rx_recvmsg_data_available(struct smc_sock *smc)
{ … }
int smc_rx_recvmsg(struct smc_sock *smc, struct msghdr *msg,
struct pipe_inode_info *pipe, size_t len, int flags)
{ … }
void smc_rx_init(struct smc_sock *smc)
{ … }