diff options
-rw-r--r-- | usr/src/uts/common/fs/zfs/sa.c | 5 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/txg.c | 1 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_ioctl.c | 7 | ||||
-rw-r--r-- | usr/src/uts/common/inet/tcp/tcp_input.c | 134 | ||||
-rw-r--r-- | usr/src/uts/common/io/devpoll.c | 69 | ||||
-rw-r--r-- | usr/src/uts/common/os/condvar.c | 26 | ||||
-rw-r--r-- | usr/src/uts/common/sys/condvar.h | 4 | ||||
-rw-r--r-- | usr/src/uts/common/syscall/poll.c | 49 | ||||
-rw-r--r-- | usr/src/uts/intel/ip/ip.global-objs.debug64 | 2 | ||||
-rw-r--r-- | usr/src/uts/intel/ip/ip.global-objs.obj64 | 2 | ||||
-rw-r--r-- | usr/src/uts/sparc/ip/ip.global-objs.debug64 | 2 | ||||
-rw-r--r-- | usr/src/uts/sparc/ip/ip.global-objs.obj64 | 2 |
12 files changed, 233 insertions, 70 deletions
diff --git a/usr/src/uts/common/fs/zfs/sa.c b/usr/src/uts/common/fs/zfs/sa.c index 4cb4546b25..57b3565cba 100644 --- a/usr/src/uts/common/fs/zfs/sa.c +++ b/usr/src/uts/common/fs/zfs/sa.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Portions Copyright 2011 iXsystems, Inc */ #include <sys/zfs_context.h> @@ -605,14 +606,14 @@ sa_find_sizes(sa_os_t *sa, sa_bulk_attr_t *attr_desc, int attr_count, * and spill buffer. */ if (buftype == SA_BONUS && *index == -1 && - P2ROUNDUP(*total + hdrsize, 8) > + *total + P2ROUNDUP(hdrsize, 8) > (full_space - sizeof (blkptr_t))) { *index = i; done = B_TRUE; } next: - if (P2ROUNDUP(*total + hdrsize, 8) > full_space && + if (*total + P2ROUNDUP(hdrsize, 8) > full_space && buftype == SA_BONUS) *will_spill = B_TRUE; } diff --git a/usr/src/uts/common/fs/zfs/txg.c b/usr/src/uts/common/fs/zfs/txg.c index ed454aa87b..55b1f3884b 100644 --- a/usr/src/uts/common/fs/zfs/txg.c +++ b/usr/src/uts/common/fs/zfs/txg.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Portions Copyright 2011 Martin Matuska */ #include <sys/zfs_context.h> diff --git a/usr/src/uts/common/fs/zfs/zfs_ioctl.c b/usr/src/uts/common/fs/zfs/zfs_ioctl.c index 1b63c9bf45..486ae9506d 100644 --- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c +++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Portions Copyright 2011 Martin Matuska */ #include <sys/types.h> @@ -1943,8 +1944,10 @@ top: uint64_t cookie = 0; int len = sizeof (zc->zc_name) - (p - zc->zc_name); - while (dmu_dir_list_next(os, len, p, NULL, &cookie) == 0) - (void) dmu_objset_prefetch(p, NULL); + while (dmu_dir_list_next(os, len, p, NULL, &cookie) == 0) { + if (!dataset_name_hidden(zc->zc_name)) + (void) dmu_objset_prefetch(zc->zc_name, NULL); + } } do { diff --git a/usr/src/uts/common/inet/tcp/tcp_input.c b/usr/src/uts/common/inet/tcp/tcp_input.c index 831ebc7ba5..918412d03a 100644 --- a/usr/src/uts/common/inet/tcp/tcp_input.c +++ b/usr/src/uts/common/inet/tcp/tcp_input.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. */ /* This file contains all TCP input processing functions. */ @@ -2230,6 +2231,114 @@ tcp_ack_mp(tcp_t *tcp) } /* + * Dummy socket upcalls for if/when the conn_t gets detached from a + * direct-callback sonode via a user-driven close(). Easy to catch with + * DTrace FBT, and should be mostly harmless. + */ + +/* ARGSUSED */ +static sock_upper_handle_t +tcp_dummy_newconn(sock_upper_handle_t x, sock_lower_handle_t y, + sock_downcalls_t *z, cred_t *cr, pid_t pid, sock_upcalls_t **ignored) +{ + ASSERT(0); /* Panic in debug, otherwise ignore. */ + return (NULL); +} + +/* ARGSUSED */ +static void +tcp_dummy_connected(sock_upper_handle_t x, sock_connid_t y, cred_t *cr, + pid_t pid) +{ + ASSERT(x == NULL); + /* Normally we'd crhold(cr) and attach it to socket state. */ + /* LINTED */ +} + +/* ARGSUSED */ +static int +tcp_dummy_disconnected(sock_upper_handle_t x, sock_connid_t y, int blah) +{ + ASSERT(0); /* Panic in debug, otherwise ignore. */ + return (-1); +} + +/* ARGSUSED */ +static void +tcp_dummy_opctl(sock_upper_handle_t x, sock_opctl_action_t y, uintptr_t blah) +{ + ASSERT(x == NULL); + /* We really want this one to be a harmless NOP for now. */ + /* LINTED */ +} + +/* ARGSUSED */ +static ssize_t +tcp_dummy_recv(sock_upper_handle_t x, mblk_t *mp, size_t len, int flags, + int *error, boolean_t *push) +{ + ASSERT(x == NULL); + + /* + * Consume the message, set ESHUTDOWN, and return an error. + * Nobody's home! + */ + freemsg(mp); + *error = ESHUTDOWN; + return (-1); +} + +/* ARGSUSED */ +static void +tcp_dummy_set_proto_props(sock_upper_handle_t x, struct sock_proto_props *y) +{ + ASSERT(0); /* Panic in debug, otherwise ignore. */ +} + +/* ARGSUSED */ +static void +tcp_dummy_txq_full(sock_upper_handle_t x, boolean_t y) +{ + ASSERT(0); /* Panic in debug, otherwise ignore. */ +} + +/* ARGSUSED */ +static void +tcp_dummy_signal_oob(sock_upper_handle_t x, ssize_t len) +{ + ASSERT(x == NULL); + /* Otherwise, this would signal socket state about OOB data. */ +} + +/* ARGSUSED */ +static void +tcp_dummy_set_error(sock_upper_handle_t x, int err) +{ + ASSERT(0); /* Panic in debug, otherwise ignore. */ +} + +/* ARGSUSED */ +static void +tcp_dummy_onearg(sock_upper_handle_t x) +{ + ASSERT(0); /* Panic in debug, otherwise ignore. */ +} + +static sock_upcalls_t tcp_dummy_upcalls = { + tcp_dummy_newconn, + tcp_dummy_connected, + tcp_dummy_disconnected, + tcp_dummy_opctl, + tcp_dummy_recv, + tcp_dummy_set_proto_props, + tcp_dummy_txq_full, + tcp_dummy_signal_oob, + tcp_dummy_onearg, + tcp_dummy_set_error, + tcp_dummy_onearg +}; + +/* * Handle M_DATA messages from IP. Its called directly from IP via * squeue for received IP packets. * @@ -2271,6 +2380,7 @@ tcp_input_data(void *arg, mblk_t *mp, void *arg2, ip_recv_attr_t *ira) squeue_t *sqp = (squeue_t *)arg2; tcp_t *tcp = connp->conn_tcp; tcp_stack_t *tcps = tcp->tcp_tcps; + sock_upcalls_t *sockupcalls; /* * RST from fused tcp loopback peer should trigger an unfuse. @@ -2396,6 +2506,11 @@ tcp_input_data(void *arg, mblk_t *mp, void *arg2, ip_recv_attr_t *ira) } } + sockupcalls = connp->conn_upcalls; + /* A conn_t may have belonged to a now-closed socket. Be careful. */ + if (sockupcalls == NULL) + sockupcalls = &tcp_dummy_upcalls; + switch (tcp->tcp_state) { case TCPS_SYN_SENT: if (connp->conn_final_sqp == NULL && @@ -2607,8 +2722,7 @@ tcp_input_data(void *arg, mblk_t *mp, void *arg2, ip_recv_attr_t *ira) } putnext(connp->conn_rq, mp1); } else { - (*connp->conn_upcalls-> - su_connected) + (*sockupcalls->su_connected) (connp->conn_upper_handle, tcp->tcp_connid, ira->ira_cred, @@ -2635,7 +2749,7 @@ tcp_input_data(void *arg, mblk_t *mp, void *arg2, ip_recv_attr_t *ira) } putnext(connp->conn_rq, mp1); } else { - (*connp->conn_upcalls->su_connected) + (*sockupcalls->su_connected) (connp->conn_upper_handle, tcp->tcp_connid, ira->ira_cred, ira->ira_cpid); @@ -3009,8 +3123,7 @@ try_again:; tcp->tcp_urp_last))) { if (IPCL_IS_NONSTR(connp)) { if (!TCP_IS_DETACHED(tcp)) { - (*connp->conn_upcalls-> - su_signal_oob) + (*sockupcalls->su_signal_oob) (connp->conn_upper_handle, urp); } @@ -3288,7 +3401,7 @@ ok:; */ if (IPCL_IS_NONSTR(connp)) { if (!TCP_IS_DETACHED(tcp)) { - (*connp->conn_upcalls->su_signal_oob) + (*sockupcalls->su_signal_oob) (connp->conn_upper_handle, urp); } } else { @@ -3447,7 +3560,7 @@ ok:; if (IPCL_IS_NONSTR(connp)) { int error; - (*connp->conn_upcalls->su_recv) + (*sockupcalls->su_recv) (connp->conn_upper_handle, mp, seg_len, MSG_OOB, &error, NULL); /* @@ -4626,8 +4739,7 @@ update_ack: boolean_t push = flags & (TH_PUSH|TH_FIN); int error; - if ((*connp->conn_upcalls->su_recv)( - connp->conn_upper_handle, + if ((*sockupcalls->su_recv)(connp->conn_upper_handle, mp, seg_len, 0, &error, &push) <= 0) { /* * We should never be in middle of a @@ -4869,8 +4981,8 @@ ack_check: if (IPCL_IS_NONSTR(connp)) { ASSERT(tcp->tcp_ordrel_mp == NULL); tcp->tcp_ordrel_done = B_TRUE; - (*connp->conn_upcalls->su_opctl) - (connp->conn_upper_handle, SOCK_OPCTL_SHUT_RECV, 0); + (*sockupcalls->su_opctl)(connp->conn_upper_handle, + SOCK_OPCTL_SHUT_RECV, 0); goto done; } diff --git a/usr/src/uts/common/io/devpoll.c b/usr/src/uts/common/io/devpoll.c index 09b21abf66..111c4c243f 100644 --- a/usr/src/uts/common/io/devpoll.c +++ b/usr/src/uts/common/io/devpoll.c @@ -23,6 +23,7 @@ * Use is subject to license terms. */ +/* Copyright (c) 2011 by Delphix. All rights reserved. */ #include <sys/types.h> #include <sys/devops.h> @@ -46,7 +47,7 @@ #define RESERVED 1 /* local data struct */ -static dp_entry_t **devpolltbl; /* dev poll entries */ +static dp_entry_t **devpolltbl; /* dev poll entries */ static size_t dptblsize; static kmutex_t devpoll_lock; /* lock protecting dev tbl */ @@ -238,7 +239,7 @@ dp_pcache_poll(pollfd_t *pfdp, pollcache_t *pcp, nfds_t nfds, int *fdcntp) { int start, ostart, end; int fdcnt, fd; - boolean_t done; + boolean_t done; file_t *fp; short revent; boolean_t no_wrap; @@ -492,7 +493,7 @@ dpopen(dev_t *devp, int flag, int otyp, cred_t *credp) static int dpwrite(dev_t dev, struct uio *uiop, cred_t *credp) { - minor_t minor; + minor_t minor; dp_entry_t *dpep; pollcache_t *pcp; pollfd_t *pollfdp, *pfdp; @@ -691,21 +692,12 @@ dpwrite(dev_t dev, struct uio *uiop, cred_t *credp) static int dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) { - timestruc_t now; - timestruc_t rqtime; - timestruc_t *rqtp = NULL; - int timecheck = 0; - minor_t minor; + minor_t minor; dp_entry_t *dpep; pollcache_t *pcp; - int error = 0; + int error = 0; STRUCT_DECL(dvpoll, dvpoll); - if (cmd == DP_POLL) { - /* do this now, before we sleep on DP_WRITER_PRESENT below */ - timecheck = timechanged; - gethrestime(&now); - } minor = getminor(dev); mutex_enter(&devpoll_lock); ASSERT(minor < dptblsize); @@ -730,11 +722,12 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) switch (cmd) { case DP_POLL: { - pollstate_t *ps; - nfds_t nfds; - int fdcnt = 0; - int time_out; - int rval; + pollstate_t *ps; + nfds_t nfds; + int fdcnt = 0; + int time_out; + clock_t *deltap = NULL; + clock_t delta; STRUCT_INIT(dvpoll, mode); error = copyin((caddr_t)arg, STRUCT_BUF(dvpoll), @@ -747,12 +740,15 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) time_out = STRUCT_FGET(dvpoll, dp_timeout); if (time_out > 0) { /* - * Determine the future time of the requested timeout. + * cv_relwaituntil_sig operates at the tick + * granularity, which by default is 10 ms. + * This results in rounding user specified + * timeouts up but prevents the system + * from being flooded with small high + * resolution timers. */ - rqtp = &rqtime; - rqtp->tv_sec = time_out / MILLISEC; - rqtp->tv_nsec = (time_out % MILLISEC) * MICROSEC; - timespecadd(rqtp, &now); + delta = MSEC_TO_TICK_ROUNDUP(time_out); + deltap = δ } if ((nfds = STRUCT_FGET(dvpoll, dp_nfds)) == 0) { @@ -765,17 +761,19 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) if (time_out == 0) return (0); mutex_enter(&curthread->t_delay_lock); - while ((rval = cv_waituntil_sig(&curthread->t_delay_cv, - &curthread->t_delay_lock, rqtp, timecheck)) > 0) + while ((delta = cv_relwaituntil_sig( + &curthread->t_delay_cv, &curthread->t_delay_lock, + deltap, TR_MILLISEC)) > 0) { continue; + } mutex_exit(&curthread->t_delay_lock); - return ((rval == 0)? EINTR : 0); + return (delta == 0 ? EINTR : 0); } /* - * XXX It'd be nice not to have to alloc each time. - * But it requires another per thread structure hook. - * Do it later if there is data suggest that. + * XXX It would be nice not to have to alloc each time, but it + * requires another per thread structure hook. This can be + * implemented later if data suggests that it's necessary. */ if ((ps = curthread->t_pollstate) == NULL) { curthread->t_pollstate = pollstate_create(); @@ -820,14 +818,15 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) */ if (time_out == 0) /* immediate timeout */ break; - rval = cv_waituntil_sig(&pcp->pc_cv, &pcp->pc_lock, - rqtp, timecheck); + + delta = cv_relwaituntil_sig(&pcp->pc_cv, &pcp->pc_lock, + deltap, TR_MILLISEC); /* * If we were awakened by a signal or timeout * then break the loop, else poll again. */ - if (rval <= 0) { - if (rval == 0) /* signal */ + if (delta <= 0) { + if (delta == 0) /* signal */ error = EINTR; break; } @@ -915,7 +914,7 @@ dppoll(dev_t dev, short events, int anyyet, short *reventsp, static int dpclose(dev_t dev, int flag, int otyp, cred_t *credp) { - minor_t minor; + minor_t minor; dp_entry_t *dpep; pollcache_t *pcp; int i; diff --git a/usr/src/uts/common/os/condvar.c b/usr/src/uts/common/os/condvar.c index 38051475f4..62945ae41f 100644 --- a/usr/src/uts/common/os/condvar.c +++ b/usr/src/uts/common/os/condvar.c @@ -24,6 +24,8 @@ * Use is subject to license terms. */ +/* Copyright (c) 2011 by Delphix. All rights reserved. */ + #include <sys/thread.h> #include <sys/proc.h> #include <sys/debug.h> @@ -500,6 +502,30 @@ cv_reltimedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t delta, } /* + * Same as cv_reltimedwait_sig() except that the timeout is optional. If + * there is no timeout then the function will block until woken up + * or interrupted. + */ +clock_t +cv_relwaituntil_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t *delta, + time_res_t res) +{ + /* + * If there is no timeout specified wait indefinitely for a + * signal or a wakeup. + */ + if (delta == NULL) { + return (cv_wait_sig_swap(cvp, mp)); + } + + /* + * cv_reltimedwait_sig will wait for the relative timeout + * specified by delta. + */ + return (cv_reltimedwait_sig(cvp, mp, *delta, res)); +} + +/* * Like cv_wait_sig_swap but allows the caller to indicate (with a * non-NULL sigret) that they will take care of signalling the cv * after wakeup, if necessary. This is a vile hack that should only diff --git a/usr/src/uts/common/sys/condvar.h b/usr/src/uts/common/sys/condvar.h index 3a7fdc5f24..3aa569a73e 100644 --- a/usr/src/uts/common/sys/condvar.h +++ b/usr/src/uts/common/sys/condvar.h @@ -23,6 +23,8 @@ * Use is subject to license terms. */ +/* Copyright (c) 2011 by Delphix. All rights reserved. */ + /* * condvar.h: * @@ -95,6 +97,8 @@ extern int cv_wait_sig(kcondvar_t *, kmutex_t *); extern clock_t cv_timedwait_sig(kcondvar_t *, kmutex_t *, clock_t); extern clock_t cv_reltimedwait_sig(kcondvar_t *, kmutex_t *, clock_t, time_res_t); +extern clock_t cv_relwaituntil_sig(kcondvar_t *, kmutex_t *, clock_t *, + time_res_t); extern int cv_wait_sig_swap(kcondvar_t *, kmutex_t *); extern int cv_wait_sig_swap_core(kcondvar_t *, kmutex_t *, int *); extern void cv_signal(kcondvar_t *); diff --git a/usr/src/uts/common/syscall/poll.c b/usr/src/uts/common/syscall/poll.c index dfcbb6dc9f..04bd862478 100644 --- a/usr/src/uts/common/syscall/poll.c +++ b/usr/src/uts/common/syscall/poll.c @@ -24,6 +24,7 @@ * Use is subject to license terms. */ +/* Copyright (c) 2011 by Delphix. All rights reserved. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ @@ -286,11 +287,10 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) klwp_t *lwp = ttolwp(t); proc_t *p = ttoproc(t); int fdcnt = 0; - int rval; int i; - timespec_t *rqtp = NULL; - int timecheck = 0; int imm_timeout = 0; + clock_t *deltap = NULL; + clock_t delta; pollfd_t *pollfdp; pollstate_t *ps; pollcache_t *pcp; @@ -302,14 +302,22 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) * Determine the precise future time of the requested timeout, if any. */ if (tsp != NULL) { - if (tsp->tv_sec == 0 && tsp->tv_nsec == 0) + if (tsp->tv_sec == 0 && tsp->tv_nsec == 0) { imm_timeout = 1; - else { - timespec_t now; - timecheck = timechanged; - gethrestime(&now); - rqtp = tsp; - timespecadd(rqtp, &now); + } else { + /* + * cv_relwaituntil_sig operates at + * the tick granularity, which by default is 10 ms. + * Convert the specified timespec to ticks, rounding + * up to at least 1 tick to avoid flooding the + * system with small high resolution timers. + */ + delta = SEC_TO_TICK(tsp->tv_sec) + + NSEC_TO_TICK(tsp->tv_nsec); + if (delta < 1) { + delta = 1; + } + deltap = δ } } @@ -347,11 +355,11 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) */ if (!imm_timeout) { mutex_enter(&t->t_delay_lock); - while ((rval = cv_waituntil_sig(&t->t_delay_cv, - &t->t_delay_lock, rqtp, timecheck)) > 0) + while ((delta = cv_relwaituntil_sig(&t->t_delay_cv, + &t->t_delay_lock, deltap, TR_MILLISEC)) > 0) continue; mutex_exit(&t->t_delay_lock); - if (rval == 0) + if (delta == 0) error = EINTR; } goto pollout; @@ -542,18 +550,19 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) * Do not check for signals if we have a zero timeout. */ mutex_exit(&ps->ps_lock); - if (imm_timeout) - rval = -1; - else - rval = cv_waituntil_sig(&pcp->pc_cv, &pcp->pc_lock, - rqtp, timecheck); + if (imm_timeout) { + delta = -1; + } else { + delta = cv_relwaituntil_sig(&pcp->pc_cv, &pcp->pc_lock, + deltap, TR_MILLISEC); + } mutex_exit(&pcp->pc_lock); /* * If we have received a signal or timed out * then break out and return. */ - if (rval <= 0) { - if (rval == 0) + if (delta <= 0) { + if (delta == 0) error = EINTR; break; } diff --git a/usr/src/uts/intel/ip/ip.global-objs.debug64 b/usr/src/uts/intel/ip/ip.global-objs.debug64 index 7062aac6db..40d5bd498b 100644 --- a/usr/src/uts/intel/ip/ip.global-objs.debug64 +++ b/usr/src/uts/intel/ip/ip.global-objs.debug64 @@ -20,6 +20,7 @@ # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2011 Nexenta Systems, Inc. All rights reserved # arp_m_tbl @@ -253,6 +254,7 @@ tcp_conn_cache tcp_conn_hash_size tcp_do_reclaim tcp_drop_ack_unsent_cnt +tcp_dummy_upcalls tcp_early_abort tcp_fallback_sock_winit tcp_free_list_max_cnt diff --git a/usr/src/uts/intel/ip/ip.global-objs.obj64 b/usr/src/uts/intel/ip/ip.global-objs.obj64 index 6c095dd832..5c56fe7efd 100644 --- a/usr/src/uts/intel/ip/ip.global-objs.obj64 +++ b/usr/src/uts/intel/ip/ip.global-objs.obj64 @@ -20,6 +20,7 @@ # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2011 Nexenta Systems, Inc. All rights reserved # arp_m_tbl @@ -250,6 +251,7 @@ tcp_conn_cache tcp_conn_hash_size tcp_do_reclaim tcp_drop_ack_unsent_cnt +tcp_dummy_upcalls tcp_early_abort tcp_fallback_sock_winit tcp_free_list_max_cnt diff --git a/usr/src/uts/sparc/ip/ip.global-objs.debug64 b/usr/src/uts/sparc/ip/ip.global-objs.debug64 index 7062aac6db..40d5bd498b 100644 --- a/usr/src/uts/sparc/ip/ip.global-objs.debug64 +++ b/usr/src/uts/sparc/ip/ip.global-objs.debug64 @@ -20,6 +20,7 @@ # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2011 Nexenta Systems, Inc. All rights reserved # arp_m_tbl @@ -253,6 +254,7 @@ tcp_conn_cache tcp_conn_hash_size tcp_do_reclaim tcp_drop_ack_unsent_cnt +tcp_dummy_upcalls tcp_early_abort tcp_fallback_sock_winit tcp_free_list_max_cnt diff --git a/usr/src/uts/sparc/ip/ip.global-objs.obj64 b/usr/src/uts/sparc/ip/ip.global-objs.obj64 index 6c095dd832..5c56fe7efd 100644 --- a/usr/src/uts/sparc/ip/ip.global-objs.obj64 +++ b/usr/src/uts/sparc/ip/ip.global-objs.obj64 @@ -20,6 +20,7 @@ # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2011 Nexenta Systems, Inc. All rights reserved # arp_m_tbl @@ -250,6 +251,7 @@ tcp_conn_cache tcp_conn_hash_size tcp_do_reclaim tcp_drop_ack_unsent_cnt +tcp_dummy_upcalls tcp_early_abort tcp_fallback_sock_winit tcp_free_list_max_cnt |