X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Fklnds%2Fsocklnd%2Fsocklnd_lib-linux.c;h=5b972711f2c7b72ae4d40dc9aae7da78c312b695;hb=9f8e9741e1cc770c766cf714f8327254c0d5fed0;hp=5b0a9e9083928429ad26897291cb5f68c39b266c;hpb=f160d81f0adcb46cc0bda256e703aea37c253323;p=fs%2Flustre-release.git diff --git a/lnet/klnds/socklnd/socklnd_lib-linux.c b/lnet/klnds/socklnd/socklnd_lib-linux.c index 5b0a9e9..5b97271 100644 --- a/lnet/klnds/socklnd/socklnd_lib-linux.c +++ b/lnet/klnds/socklnd/socklnd_lib-linux.c @@ -55,6 +55,8 @@ enum { SOCKLND_TX_BUFFER_SIZE, SOCKLND_NAGLE, SOCKLND_IRQ_AFFINITY, + SOCKLND_ROUND_ROBIN, + SOCKLND_KEEPALIVE, SOCKLND_KEEPALIVE_IDLE, SOCKLND_KEEPALIVE_COUNT, SOCKLND_KEEPALIVE_INTVL, @@ -80,6 +82,8 @@ enum { #define SOCKLND_TX_BUFFER_SIZE CTL_UNNUMBERED #define SOCKLND_NAGLE CTL_UNNUMBERED #define SOCKLND_IRQ_AFFINITY CTL_UNNUMBERED +#define SOCKLND_ROUND_ROBIN CTL_UNNUMBERED +#define SOCKLND_KEEPALIVE CTL_UNNUMBERED #define SOCKLND_KEEPALIVE_IDLE CTL_UNNUMBERED #define SOCKLND_KEEPALIVE_COUNT CTL_UNNUMBERED #define SOCKLND_KEEPALIVE_INTVL CTL_UNNUMBERED @@ -157,7 +161,7 @@ static cfs_sysctl_table_t ksocknal_ctl_table[] = { { .ctl_name = SOCKLND_ZERO_COPY, .procname = "zero_copy", - .data = &ksocknal_tunables.ksnd_zc_min_frag, + .data = &ksocknal_tunables.ksnd_zc_min_payload, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, @@ -239,6 +243,24 @@ static cfs_sysctl_table_t ksocknal_ctl_table[] = { }, #endif { + .ctl_name = SOCKLND_ROUND_ROBIN, + .procname = "round_robin", + .data = &ksocknal_tunables.ksnd_round_robin, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + .strategy = &sysctl_intvec, + }, + { + .ctl_name = SOCKLND_KEEPALIVE, + .procname = "keepalive", + .data = &ksocknal_tunables.ksnd_keepalive, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + .strategy = &sysctl_intvec, + }, + { .ctl_name = SOCKLND_KEEPALIVE_IDLE, .procname = "keepalive_idle", .data = &ksocknal_tunables.ksnd_keepalive_idle, @@ -315,6 +337,18 @@ cfs_sysctl_table_t ksocknal_top_ctl_table[] = { int ksocknal_lib_tunables_init () { + if (!*ksocknal_tunables.ksnd_typed_conns) { + int rc = -EINVAL; +#if SOCKNAL_VERSION_DEBUG + if (*ksocknal_tunables.ksnd_protocol < 3) + rc = 0; +#endif + if (rc != 0) { + CERROR("Protocol V3.x MUST have typed connections\n"); + return rc; + } + } + if (*ksocknal_tunables.ksnd_zc_recv_min_nfrags < 2) *ksocknal_tunables.ksnd_zc_recv_min_nfrags = 2; if (*ksocknal_tunables.ksnd_zc_recv_min_nfrags > LNET_MAX_IOV) @@ -447,9 +481,12 @@ ksocknal_lib_sock_irq (struct socket *sock) } int -ksocknal_lib_zc_capable(struct socket *sock) +ksocknal_lib_zc_capable(ksock_conn_t *conn) { - int caps = sock->sk->sk_route_caps; + int caps = conn->ksnc_sock->sk->sk_route_caps; + + if (conn->ksnc_proto == &ksocknal_protocol_v1x) + return 0; /* ZC if the socket supports scatter/gather and doesn't need software * checksums */ @@ -514,15 +551,16 @@ int ksocknal_lib_send_kiov (ksock_conn_t *conn, ksock_tx_t *tx) { struct socket *sock = conn->ksnc_sock; - lnet_kiov_t *kiov = tx->tx_kiov; + lnet_kiov_t *kiov = tx->tx_kiov; int rc; int nob; + /* Not NOOP message */ + LASSERT (tx->tx_lnetmsg != NULL); + /* NB we can't trust socket ops to either consume our iovs * or leave them alone. */ - - if (kiov->kiov_len >= *ksocknal_tunables.ksnd_zc_min_frag && - tx->tx_msg.ksm_zc_req_cookie != 0) { + if (tx->tx_msg.ksm_zc_cookies[0] != 0) { /* Zero copy is enabled */ struct sock *sk = sock->sk; struct page *page = kiov->kiov_page; @@ -1215,21 +1253,6 @@ ksocknal_lib_memory_pressure(ksock_conn_t *conn) return rc; } -__u64 -ksocknal_lib_new_incarnation(void) -{ - struct timeval tv; - - /* The incarnation number is the time this module loaded and it - * identifies this particular instance of the socknal. Hopefully - * we won't be able to reboot more frequently than 1MHz for the - * forseeable future :) */ - - do_gettimeofday(&tv); - - return (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec; -} - int ksocknal_lib_bind_thread_to_cpu(int id) {