mxlnd - MX 1.2.1 or later,
ptllnd - Portals 3.3 / UNICOS/lc 1.5.x, 2.0.x
+Severity : major
+Bugzilla : 13236
+Description: TOE Kernel panic by ksocklnd
+Details : offloaded sockets provide their own implementation of sendpage,
+ can't call tcp_sendpage() directly
+
Severity : normal
Bugzilla : 10778
Description: kibnal_shutdown() doesn't finish; lconf --cleanup hangs
.proc_handler = &proc_dointvec
};
#endif
- LASSERT (j == i+1);
- LASSERT (i < sizeof(ksocknal_ctl_table)/sizeof(ksocknal_ctl_table[0]));
+ ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) { 0 };
+
+ LASSERT (j == i);
+ LASSERT (i <= sizeof(ksocknal_ctl_table)/sizeof(ksocknal_ctl_table[0]));
ksocknal_tunables.ksnd_sysctl =
cfs_register_sysctl_table(ksocknal_top_ctl_table, 0);
if (kiov->kiov_len >= *ksocknal_tunables.ksnd_zc_min_frag &&
tx->tx_msg.ksm_zc_req_cookie != 0) {
/* Zero copy is enabled */
+ struct sock *sk = sock->sk;
struct page *page = kiov->kiov_page;
int offset = kiov->kiov_offset;
int fragsize = kiov->kiov_len;
fragsize < tx->tx_resid)
msgflg |= MSG_MORE;
- rc = tcp_sendpage(sock, page, offset, fragsize, msgflg);
+ if (sk->sk_prot->sendpage != NULL) {
+ rc = sk->sk_prot->sendpage(sk, page,
+ offset, fragsize, msgflg);
+ } else {
+ rc = tcp_sendpage(sock, page, offset, fragsize, msgflg);
+ }
} else {
#if SOCKNAL_SINGLE_FRAG_TX || !SOCKNAL_RISK_KMAP_DEADLOCK
struct iovec scratch;
return (rc);
}
-void ksocknal_lib_csum_tx(ksock_tx_t *tx)
+void
+ksocknal_lib_csum_tx(ksock_tx_t *tx)
{
int i;
__u32 csum;
nob = strnlen(name, IFNAMSIZ);
if (nob == IFNAMSIZ) {
CERROR("Interface name %s too long\n", name);
- rc = -EINVAL;
- goto out;
+ return -EINVAL;
}
CLASSERT (sizeof(ifr.ifr_name) >= IFNAMSIZ);
if (rc != 0) {
CERROR("Can't get flags for interface %s\n", name);
- goto out;
+ return rc;
}
if ((ifr.ifr_flags & IFF_UP) == 0) {
CDEBUG(D_NET, "Interface %s down\n", name);
*up = 0;
*ip = *mask = 0;
- goto out;
+ return 0;
}
*up = 1;
if (rc != 0) {
CERROR("Can't get IP address for interface %s\n", name);
- goto out;
+ return rc;
}
val = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr;
if (rc != 0) {
CERROR("Can't get netmask for interface %s\n", name);
- goto out;
+ return rc;
}
val = ((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr.s_addr;
*mask = ntohl(val);
- out:
- return rc;
+ return 0;
}
EXPORT_SYMBOL(libcfs_ipif_query);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)
int sock_create_lite(int family, int type, int protocol, struct socket **res)
{
- int err = 0;
struct socket *sock;
sock = sock_alloc();
- if (!sock) {
- err = -ENOMEM;
- goto out;
- }
+ if (sock == NULL)
+ return -ENOMEM;
+
sock->type = type;
-out:
*res = sock;
- return err;
+
+ return 0;
}
#endif