rwatson [Sat, 15 Jan 2011 19:46:36 +0000 (19:46 +0000)]
Merge r204497, r204499 from head to stable/8:
Changes to support crashdump analysis of netisr:
- Rename the netisr protocol registration array, 'np' to 'netisr_proto',
in order to reduce the chances of symbol name collisions. It remains
statically defined, but it will be looked up by netstat(1).
- Move certain internal structure definitions from netisr.c to
netisr_internal.h so that netstat(1) can find them. They remain
private, and should not be used for any other purpose (for example,
they should not be used by kernel modules, which must instead use the
public interfaces in netisr.h).
- Store a kernel-compiled version of NETISR_MAXPROT in the global variable
netisr_maxprot, and export via a sysctl, so that it is available for use
by netstat(1). This is especially important for crashdump
interpretation, where the size of the workstream structure is determined
by the maximum number of protocols compiled into the kernel.
rwatson [Sat, 15 Jan 2011 19:23:14 +0000 (19:23 +0000)]
Merge r204494, r204511 from head to stable/8:
A first cut at teaching libkvm how to deal with dynamic per-CPU storage
(DPCPU):
A new API, kvm_dpcpu_setcpu(3), selects the active CPU for the purposes
of DPCPU. Calls to kvm_nlist(3) will automatically translate DPCPU
symbols and return a pointer to the current CPU's version of the data.
Consumers needing to read the same symbol on several CPUs will invoke a
series of setcpu/nlist calls, one per CPU of interest.
This addition makes it possible for tools like netstat(1) to query the
values of DPCPU variables during crashdump analysis, and is based on
similar code handling virtualized global variables.
Sponsored by: Juniper Networks, Inc.
Not all programs including kvm.h include the necessary headers to use
u_int, so prefer unsigned int.
rwatson [Sat, 15 Jan 2011 19:05:06 +0000 (19:05 +0000)]
Merge r204303 from head to stable/8:
Fix edge cases in several KASSERTs: use <= rather than < when testing that
counters have not gone about MAXCPU or NETISR_MAXPROT. These problems
caused panics on UP kernels with INVARIANTS when using sysctl -a, but
would also have caused problems for 32-core boxes or if the netisr
protocol vector was fully populated.
Reported by: nwhitehorn, Neel Natu <neelnatu@gmail.com>
rwatson [Sat, 15 Jan 2011 18:51:45 +0000 (18:51 +0000)]
Merge r204202 from head to stable/8:
Teach netstat(1) to print out netisr statistics when given the -Q argument.
Currently supports only reporting on live systems via sysctl, kmem support
needs to be edded.
pjd [Sat, 15 Jan 2011 08:18:58 +0000 (08:18 +0000)]
MFC r217307,r217308,r217312:
r217307:
Install default signal handlers before masking signals we want to handle.
It is possible that the parent process ignores some of them and sigtimedwait()
will never see them, eventhough they are masked.
The most common situation for this to happen is boot process where init(8)
ignores SIGHUP before starting to execute /etc/rc. This in turn caused
hastd(8) to ignore SIGHUP.
Reported by: trasz
Obtained from: Wheel Systems Sp. z o.o. http://www.wheelsystems.com
r217308:
Add a note that when custom signal handler is installed for a signal,
signal action is restored to default in child after fork(2).
In this case there is no need to do anything with dummy SIGCHLD handler,
because after fork(2) it will be automatically reverted to SIG_IGN.
Obtained from: Wheel Systems Sp. z o.o. http://www.wheelsystems.com
r217312:
execve(2), not fork(2) resets signal handler to the default value (if it isn't
ignored). Correct comment talking about that.
yongari [Sat, 15 Jan 2011 00:32:15 +0000 (00:32 +0000)]
MFC r217296:
For re(4) controllers that uses new jumbo frame scheme(RTL8168C/D/E),
limit maximum RX buffer size to RE_RX_DESC_BUFLEN instead of
blindly configuring it to 16KB. Due to lack of documentation, re(4)
didn't allow jumbo frame on these controllers. However it seems
controller is confused with jumbo frame such that it can DMA the
received frame to wrong address instead of splitting it into
multiple RX buffers. Of course, this caused panic.
Since re(4) does not support jumbo frames on these controllers,
make controller drop frame that is longer than RE_RX_DESC_BUFLEN
sized frame. Fortunately RTL810x controllers, which do not support
jumbo frame, have no such issues but this change also limited
maximum RX buffer size allowed to RTL810x controllers. Allowing
16KB RX buffer for controllers that have no such capability is
meaningless.
yongari [Fri, 14 Jan 2011 22:36:33 +0000 (22:36 +0000)]
MFC r216284:
r184610 changed the way how TX frames are handled on AX88178 and
AX88772 controllers. ASIX added a new feature for AX88178/AX88772
controllers which allows combining multiple TX frames into a single
big frame. This was to overcome one of USB limitation where it
can't generate more than 8k interrupts/sec which in turn means USB
ethernet controllers can not send more than 8k packets per second.
Using ASIX's feature greatly enhanced TX performance(more than 3~4
times) compared to 7.x driver. However it seems r184610 removed
boundary checking for buffered frames which in turn caused
instability issues under certain conditions. In addition, using
ASIX's feature triggered another issue which made USB controller
hang under certain conditions. Restarting ethernet controller
didn't help under this hang condition and unplugging and replugging
the controller was the only solution. I believe there is a silicon
bug in TX frame combining feature on AX88178/AX88772 controllers.
To address these issues, reintroduce the boundary checking for both
AX88178 and AX88772 after copying a frame to USB buffer and do not
use ASIX's multiple frame combining feature. Instead, use USB
controller's multi-frame transmit capability to enhance TX
performance as suggested by Hans[1].
This should fix a long standing axe(4) instability issues reported
on AX88772 and AX88178 controllers. While I'm here remove
unnecessary TX frame length check since upper stack always
guarantee the size of a frame to be less than MCLBYTES.
Special thanks to Derrick Brashear who tried numerous patches
during last 4 months and waited real fix with patience. Without
this enthusiastic support, patience and H/W donation I couldn't fix
it since I was not able to trigger the issue on my box.
yongari [Fri, 14 Jan 2011 22:31:26 +0000 (22:31 +0000)]
MFC r215968:
Introduce new macro AXE_IS_178_FAMILY and AXE_IS_772. Include
AX88772A and AX88772B for future extension. While here add TX
buffer size for 178 family controllers.
yongari [Fri, 14 Jan 2011 22:29:45 +0000 (22:29 +0000)]
MFC r215960,215962-215964,215966:
r215960:
Apply GPIO configuration for all CICADA PHYs.
While I'm here show selected phymode to ease of debugging.
r215962:
Move axe_reset() to axe_init().
r215963:
Do not reinitialize controller if it's already running.
r215964:
Make sure to change to currently selected media.
r215966:
Do full controller initialization in axe_reset() for controllers
that require special configuration from EEPROM. This will put
controllers into known sane state.
marius [Fri, 14 Jan 2011 20:43:21 +0000 (20:43 +0000)]
MFC: r217013
Teach ifconfig(8) the handy shared option shortcut aliases the NetBSD
counterpart also takes, i.e. "fdx" for "full-duplex", "flow" for
"flowcontrol", "hdx" for "half-duplex" as well as "loop" and "loopback"
for "hw-loopback".
cperciva [Fri, 14 Jan 2011 16:30:22 +0000 (16:30 +0000)]
Don't use amdc1e on XEN && !XEN_PRIVILEGED. The Xen hypervisor
gets justifiably annoyed when a guest OS tries to halt the CPU.
This fixes a panic when booting FreeBSD/XEN on recent AMD CPUs.
This is not an MFC; the problem was (accidentally?) fixed in HEAD
four months ago via SVN r212541.
jh [Fri, 14 Jan 2011 11:12:56 +0000 (11:12 +0000)]
MFC r214748:
Extend the g_eventlock mutex coverage in one_event() to include setting
of the EV_DONE flag and use the mutex to protect against losing wakeups
in g_waitfor_event().
lstewart [Fri, 14 Jan 2011 00:57:13 +0000 (00:57 +0000)]
MFC r216995,217043:
Add a man page for the Object Specific Data (OSD) KPI.
Although not directly related the FreeBSD Foundation funded "Five New TCP
Congestion Control Algorithms for FreeBSD" project, the understanding and
inspiration required to write this documentation was significantly bolstered by
the Foundation's support.
keramida [Thu, 13 Jan 2011 11:23:42 +0000 (11:23 +0000)]
MFC r217208 - regression/date: unset all LC_xxx vars and set LANG/LC_ALL
When running with a custom locale setup, it's easy to confuse the
date regression tests and cause them to fail, e.g. when LANG='C'
but LC_ALL='el_GR.UTF-8'. Set LC_ALL to 'C', which overrides all
other LC_xxx options, to avoid this sort of problem.
gnn [Wed, 12 Jan 2011 20:44:11 +0000 (20:44 +0000)]
MFC: 215207
Add a queue to hold packets while we await an ARP reply.
When a fast machine first brings up some non TCP networking program
it is quite possible that we will drop packets due to the fact that
only one packet can be held per ARP entry. This leads to packets
being missed when a program starts or restarts if the ARP data is
not currently in the ARP cache.
This code adds a new sysctl, net.link.ether.inet.maxhold, which defines
a system wide maximum number of packets to be held in each ARP entry.
Up to maxhold packets are queued until an ARP reply is received or
the ARP times out. The default setting is the old value of 1
which has been part of the BSD networking code since time
immemorial.
Expose the time we hold an incomplete ARP entry by adding
the sysctl net.link.ether.inet.wait, which defaults to 20
seconds, the value used when the new ARP code was added..
dougb [Tue, 11 Jan 2011 20:08:34 +0000 (20:08 +0000)]
For stat.c
==========
MFC r216196:
Bring in the change from NetBSD 1.18:
"If using stat (the -L flag) and it fails, fall back to lstat(). It
may be the case that we're examining a broken symlink, and anything is
better than nothing."
The changes in 1.14 through 1.17 were not relevant to us.
Obtained from: atatat@NetBSD.org
MFC r216202:
Bring in the change from NetBSD 1.22:
"Fix a trivial truncation case, and eliminate a corner case that might
print a nul character."
I am purposely bypassing the following versions:
1.19 A build infrastructure change that does not apply to us
1.20 A feature I am not interested in, but don't object if someone else
wants to pick it up
1.21 A build infrastructure change that does not apply to us
Obtained from: atatat@NetBSD.org
MFC r216203:
Bring in a new feature, adding a -f option to readlink to print the path
of the target, similar to realpath(1). See the discussion at:
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=34662
This brings in the following changes:
1.24
"PR/34662: martijnb at atlas dot ipv6 dot stack dot nl: readlink doesn't
grok -f, and there's no alternative (+fix)
Patch applied with minor tweak (%y -> %R, as it was already taken) plus
some nits from myself. Thanks!"
Obtained from: elad@NetBSD.org
1.25
"Fix a segfault when doing 'stat -f %R' on the stdin file handle, instead
fake the filename '(stdin)' like the %N format."
Obtained from: mlelstv@NetBSD.org
1.27
"The ofmt variable is actually a bit mask (not the character that was
in the format string) so that we can "or" it with the bits in the
formats variable. This fixes the missing " -> " in front of the real
path (when you use %SR).
Also, the ?: needs another space."
Obtained from: atatat@NetBSD.org
I am purposely omitting the following changes:
1.23 A humanize_number(3) clone that should better be implemented by
actually using humanize_number(3)
1.26 This is the removal of license clause 3 and 4, already handled
by imp in r203971
MFC 216205:
Bring in the update from NetBSD 1.28:
"Fix WARNS=4 issues (-Wcast-qual -Wsign-compare)"
Because of code differences I had to hand-apply parts of the patch,
so responsibility for errors goes to me.
Obtained from: lukem@NetBSD.org
MFC 216206: [ Also applies to Makefile ]
Fix an "unused variable" error that gets us all the way to WARNS=6
MFC 216207:
Bring in the following changes from NetBSD. See the discussion at:
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=44128
1.29
"Don't printf time_t with %d; fixes PR 44128 from yamt. With this change it
successfully prints mtimes after 2038."
1.30
"Improve previous with comments."
Obtained from: dholland@NetBSD.org (both)
MFC 216343:
Bring in the change from OpenBSD's 1.14:
"synchronize synopsis and usage; "-l", "-r", "-s" and "-x" are mutually
exclusive; while here, slightly improve spacing in the source code
so it fits on a 80-column display again.
diff greatly improved by martynas@"
Obtained from: sobrado@OpenBSD.org
MFC 216512:
Bring in the relevant changes from NetBSD's 1.31:
"Use strlcpy, not strncpy, when the desired semantics are strlcpy's
rather than strncpy's."
Note: NetBSD's 1.32 is their adoption of our r216206
Obtained from: dholland@NetBSD.org
For stat.1
==========
MFC 216197:
Add my own documentation for the change in our r216196, aka NetBSD's 1.18
For -L if stat(2) fails, fall back to lstat(2).
.Dd purposely not bumped because more changes are coming.
MFC 216204:
Bring in the update from NetBSD 1.19, the documentation of readlink -f
"PR/34662: martijnb at atlas dot ipv6 dot stack dot nl: readlink doesn't
grok -f, and there's no alternative (+fix)
Patch applied with minor tweak (%y -> %R, as it was already taken) plus
some nits from myself. Thanks!"
Obtained from: elad@NetBSD.org
MFC 216209:
Bring in the change from NetBSD 1.12:
"document default format."
Obtained from: yamt@NetBSD.org
MFC 216213:
Bring in the changes from NetBSD 1.13 that we did not already have, with
some differences.
"Sort options. Use more mdoc macros. Some nit fixes. Bump date."
Obtained from: wiz@NetBSD.org
MFC 216215:
Bring in the changes from NetBSD 1.16 that we did not already have.
"Some fixes from jmc@openbsd."
Obtained from: wiz@NetBSD.org
MFC 216216:
Bring in the change from NetBSD 1.20:
"Make sentence easier to parse. From jsing@openbsd via jmc@openbsd."
Obtained from: wiz@NetBSD.org
MFC 216218:
Bring in the following changes from NetBSD:
1.21
"Document the flags displayed by the default format, and mention their short
names. From espie@openbsd via jmc@openbsd."
1.24
"Fix three variable names.
From Todd T. Fries via Jason McIntyre."
Obtained from: wiz@NetBSD.org (previous 2)
1.25
"Be consistent: document the birthtime field of struct stat for
the "B" field specifier."
Obtained from: reed@NetBSD.org
1.26
"Drop trailing space."
Obtained from: wiz@NetBSD.org
1.27
"Since we have st_birthtime in struct stat, it is in default display."
Obtained from: enami@NetBSD.org
Purposely skipping the following revisions:
1.22 NetBSD-specific change
1.23 Removal of license clauses 3 and 4, already handled by imp
in our r203971
MFC 216219:
Bring in the change from NetBSD 1.28:
"\\ -> \e"
Obtained from: joerg@NetBSD.org
Bump .Dd because we're now up to date with the latest NetBSD version
dim [Tue, 11 Jan 2011 19:17:13 +0000 (19:17 +0000)]
MFC r215801:
Change ambiguous (or invalid, depending on how strict you want to be :)
assembly instruction "movw %rcx,2(%rax)" to "movw %cx,2(%rax)", since
the intent was to move 16 bits of data, in this case.
dim [Tue, 11 Jan 2011 19:13:29 +0000 (19:13 +0000)]
MFC r215212:
Similar to r212647, remove the workaround in sys/net/vnet.h for an ld
bug (incorrect placement of __start_SECNAME in some cases) that was
fixed in r210245.
There is already an UPDATING entry about needing a recent ld.
mdf [Tue, 11 Jan 2011 17:33:29 +0000 (17:33 +0000)]
MFC r216463:
One of the compat32 functions was copying in a raw timespec, instead of
a 32-bit one. This can cause weird timeout issues, as the copying reads
garbage from the user.
mdf [Tue, 11 Jan 2011 17:29:34 +0000 (17:29 +0000)]
(Note the previous commit was a MFC of r216616).
MFC r216620:
Initialize fp_location for explicitly managed fail points, and push
the parentheses around the location for simple fail points into the
location string. This makes the print on fail point set more
consistent between the two versions.
Also fix up fail.h a little for style(9): only use one of sys/param.h
and sys/types.h, and use the existing __XSTRING() macro instead of
rolling our own. Also fix up a few tabs on changed and nearby lines.
Lastly, since KFAIL_POINT_{BEGIN,END} are not meant for use outside
this file, just eliminate the macros entirely.
mdf [Tue, 11 Jan 2011 17:26:36 +0000 (17:26 +0000)]
Move the fail_point_entry definition from fail.h to kern_fail.c, which
allows putting the enumeration constants of fail point types with the
text string that matches them.
mdf [Tue, 11 Jan 2011 17:16:50 +0000 (17:16 +0000)]
MFC r217109:
Fix a memory overflow where the input length to g_gpt_utf8_to_utf16()
was specified incorrectly, causing the bzero to run past the end of a
malloc(9)'d object.
Submitted by: Eric Youngblut < eyoungblut AT isilon DOT com >
yongari [Mon, 10 Jan 2011 19:43:16 +0000 (19:43 +0000)]
MFC r217226:
Apply DMA address space restriction to controllers that have 4GB
DMA boundary bug and runs with PCI-X mode. watchdog timeout was
observed on BCM5704 which lives behind certain PCI-X bridge(e.g.
AMD 8131 PCI-X bridge). It's still not clear whether the root
cause came from that PCI-X bridge or not. The watchdog timeout
indicates the issue is in TX path. If the bridge reorders TX
mailbox write accesses it would generate all kinds of problems but
I'm not sure. This should be revisited.
Early MFC requested by re@ for inclusion in 8.2-RC2/7.4-RC2.
Tested by: Michael L. Squires (mikes <> siralan dot org)
deischen [Mon, 10 Jan 2011 04:48:18 +0000 (04:48 +0000)]
MFC: 217169
Make sure to always do source address selection on
an unbound socket, regardless of any multicast options.
If an address is specified via a multicast option, then
let it override normal the source address selection.
This fixes a bug where source address selection was
not being performed when multicast options were present
but without an interface being specified.
Move the increment operation under the lock and split the condition
variable into two so that we can see on which one we are waiting.
This might also more properly propagate the update of the
flowclean_cycles flag and avoid "hangs" people were seeing.
Add and export constants of array sizes of jail parameters as compiled into
the kernel.
This is the least intrusive way to allow kvm to read the (sparse) arrays
independent of the options the kernel was compiled with.
Reviewed by: jhb (originally)
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Sponsored by: CK Software GmbH
Move the uint64_t to were the padding was before, rather than before all
pad. Keep them to the end so that the two pad[]s are kept together.
This should restore ABI as well on platforms, where
sizeof(void *) != sizeof(uint64_t)
after r216968, r217018.
rmacklem [Sat, 8 Jan 2011 01:11:14 +0000 (01:11 +0000)]
MFC: r216700
Modify the experimental NFS server so that it uses LK_SHARED
for RPC operations when it can. Since VFS_FHTOVP() currently
always gets an exclusively locked vnode and is usually called
at the beginning of each RPC, the RPCs for a given vnode will
still be serialized. As such, passing a lock type argument to
VFS_FHTOVP() would be preferable to doing the vn_lock() with
LK_DOWNGRADE after the VFS_FHTOVP() call.
rmacklem [Fri, 7 Jan 2011 20:31:47 +0000 (20:31 +0000)]
MFC: r216693
Add an argument to nfsvno_getattr() in the experimental
NFS server, so that it can avoid calling VOP_ISLOCKED()
when the vnode is known to be locked. This will allow
LK_SHARED to be used for these cases, which happen to
be all the cases that can use LK_SHARED. This does not
fix any bug, but it reduces the number of calls to
VOP_ISLOCKED() and prepares the code so that it can be
switched to using LK_SHARED in a future patch.
rmacklem [Fri, 7 Jan 2011 20:07:30 +0000 (20:07 +0000)]
MFC: r216692
Simplify vnode locking in the expeimental NFS server's
readdir functions. In particular, get rid of two bogus
VOP_ISLOCKED() calls. Removing the VOP_ISLOCKED() calls
is the only actual bug fixed by this patch.
cperciva [Fri, 7 Jan 2011 14:03:28 +0000 (14:03 +0000)]
MFC r216944,r216963,r216960: Improve the stability of the i386/XEN pmap
code by correctly protecting page mapping queue variables within a
critical section and by adding ham-fisted locking to pmap.c.
cperciva [Thu, 6 Jan 2011 12:34:18 +0000 (12:34 +0000)]
MFC r200288, r200346, r200352: Make minidump work on i386/XEN.
Note that r200288 and r200346 touched i386/i386/dump_machdep.c,
but in that file r200346 was a back-out of r200288; so the fact
that dump_machdep.c has moved to the x86 tree is not a problem.
In the !XEN case the files under i386/i386 are unchanged after
preprocessing.
kib [Wed, 5 Jan 2011 13:50:37 +0000 (13:50 +0000)]
MFC r216799:
Move the increment of vm object generation count into
vm_object_set_writeable_dirty(). Merge two loops in
vm_object_page_clean(), doing the removal of write permission and
cleaning in the same loop. Clear the OBJ_MIGHTBEDIRTY flag after the
cleaning loop, not before.
marius [Wed, 5 Jan 2011 13:26:26 +0000 (13:26 +0000)]
MFC: r216820
- Add CPUTYPE support for sparc64. The net result is that it's now possible
to let the compiler optimize for the famility of UltraSPARC-III CPUs as the
default already was to optimize for UltraSPARC-I/II and generating generic
64-bit V9 is mainly for reference purposes. At least for SPARC64-V CPUs
code optimized for UltraSPARC-I/II still is the most performant one.
Thanks go to Michael Moll for testing SPARC64-V.
- Move a booke MACHINE_CPU bit into the right section.
kib [Wed, 5 Jan 2011 12:47:42 +0000 (12:47 +0000)]
MFC r216794:
Add reporting of GEOM::candelete BIO_GETATTR for md(4) and geom_disk(4).
Non-zero value of attribute means that device supports BIO_DELETE.
marius [Wed, 5 Jan 2011 12:27:52 +0000 (12:27 +0000)]
MFC: r216802
- Move the macros for generating load and store instructions to asmacros.h
so they can be shared by different source files and extend them by a
variant for atomic compare and swap.
- Consistently use EMPTY.
marius [Wed, 5 Jan 2011 12:05:27 +0000 (12:05 +0000)]
MFC: r216628
Extend the hack of r182730 to trick GAS/GCC into compiling access to
STICK/STICK_COMPARE independently of the selected instruction set by
TICK_COMPARE so tick.c once again can be compiled with gcc -mcpu=v9
for reference purposes.
marius [Wed, 5 Jan 2011 11:46:17 +0000 (11:46 +0000)]
MFC: r216623
- Add a comment regarding the fact that as documented in the datasheet
manual 1000BASE-T modes of DP83865 only work together with other National
Semiconductor PHYs.
- Spell 10BASE-T correctly
- Remove some redundant braces.
marius [Wed, 5 Jan 2011 11:43:17 +0000 (11:43 +0000)]
MFC: r216085
- Remove the remaining support for older (in this case pre-7.0-RELEASE)
versions of FreeBSD. In fact we are already missing a lot of conditional
code necessary to support older versions of FreeBSD, including alternatives
for vital functionality not yet provided by the respective subsystem back
then (see for example r199663). So this change shouldn't actually break
this driver on versions of FreeBSD that were supported before. Besides,
this driver also isn't maintained as an multi-release version outside of
the main repository, so removing the conditional code shouldn't be a
problem in that regard either.
- Sprinkle some more const on tables.
marius [Wed, 5 Jan 2011 11:29:07 +0000 (11:29 +0000)]
MFC: r216891
Extend the section in which interrupts are disabled in the TLB demap
functions, otherwise if we get preempted after checking whether a certain
pmap is active on the current CPU but before disabling interrupts we might
operate on an outdated state as the pmap might have been deactivated in
the meantime. As the same issue may arises when the TLB demap function is
interrupted by a TLB demap IPI, just entering a critical section before
the check isn't sufficient so we have to fully disable interrupts instead.
bschmidt [Sun, 2 Jan 2011 09:03:53 +0000 (09:03 +0000)]
MFC r216824:
The RX path is missing a few bus_dmamap_*() calls, this results in
modification of memory which was already free'd and eventually in:
wpi0: could not map mbuf (error 12)
wpi0: wpi_rx_intr: bus_dmamap_load failed, error 12
and an usuable device.
rmacklem [Fri, 31 Dec 2010 14:03:57 +0000 (14:03 +0000)]
MFC: r216510
Fix two vnode locking problems in nfsd_recalldelegation() in the
experimental NFSv4 server. The first was a bogus use of VOP_ISLOCKED()
in a KASSERT() and the second was the need to lock the vnode for the
nfsrv_checkremove() call. Also, delete a "__unused" that was bogus,
since the argument is used.
bschmidt [Fri, 31 Dec 2010 12:48:43 +0000 (12:48 +0000)]
MFC r216049:
Some drivers rely on the existence of certain keys. The Atheros 9xxx
driver for example requests the NetCfgInstanceId but doesn't check the
returned status code and will happily access random memory instead.
pjd [Thu, 30 Dec 2010 09:45:26 +0000 (09:45 +0000)]
MFC r216565,r216631,r216632,r216633,r216774:
r216565:
Reduce lock scope a little.
r216631:
On error, unbusy file system and jump to the end, so we won't try to unlock
NULL *vpp.
Reviewed by: kib
r216632:
- Move pubflag and lockflag handling from nfsrv_fhtovp() to nfs_namei() -
this is the only place that is different from all the other nfsrv_fhtovp()
consumers.
This simplifies nfsrv_fhtovp() a bit and also eliminates one
vn_lock/VOP_UNLOCK() cycle in case of NFSv3.
- Implement NFSRV_FLAG_BUSY flag for nfsrv_fhtovp() that tells it to leave
mount point busy.
Reviewed by: kib
r216633:
Use newly added NFSRV_FLAG_BUSY flag for nfsrv_fhtovp() to keep mount point
busy. This fixes a race where we can pass invalid mount point to VFS_VGET()
via vp->v_mount when exported file system was forcibly unmounted between
nfsrv_fhtovp() and VFS_VGET().
Reviewed by: kib
r216774:
ZFS might not return monotonically increasing directory offset cookies,
so turn off UFS-specific hack that assumes so in ZFS case.
Before the change we can miss returning some directory entries to a
NFS client.
I believe that the hack should be moved to ufs_readdir(), but until we find
somebody who will do it, turn it off for ZFS in NFS server code.