yongari [Tue, 30 Aug 2011 17:20:34 +0000 (17:20 +0000)]
MFC r225088:
Disable PHY hibernation until I get more detailed hibernation
programming secret. The PHY would go into sleep state when it
detects no established link and it will re-establish link when the
cable is plugged in. Previously it failed to re-establish link
when the cable is plugged in such that it required to manually down
and up the interface again to make it work. This came from
incorrectly programmed hibernation parameters. According to
Atheros, each PHY chip requires different configuration for
hibernation and different vendor has different settings for the
same chip.
Disabling hibernation may consume more power but establishing link
looks more important than saving power.
Special thanks to Atheros for giving me instructions that disable
hibernation.
kib [Tue, 30 Aug 2011 11:50:28 +0000 (11:50 +0000)]
MFC r224915:
Do not return success and a string "unknown" when vn_fullpath() was unable
to resolve the path of the text vnode of the process. The behaviour is
very confusing for any consumer of the procfs, in particular, java.
marck [Tue, 30 Aug 2011 11:47:36 +0000 (11:47 +0000)]
MFC r225122:
Add kern.cam.boot_delay description (with reasonable default) to
default/loader.conf
This should help people installing ${OS} to USB devices, where there are
frequently cases where kernel tries to mount root before actual umass sensing
is finished.
marius [Tue, 23 Aug 2011 14:37:39 +0000 (14:37 +0000)]
MFC: r225015
Revert r224157 (MFC'ed to stable/8 in r224401), re-enabling r222135 (MFC'ed
to stable/8 in r222371). The underlying problem keeping the latter from
working as expected was fixed in r225014 (MFC'ed to stable/8 in r225116).
marius [Tue, 23 Aug 2011 14:32:53 +0000 (14:32 +0000)]
MFC: r225014
r221812 (MFC'ed to stable/8 in r222159) reveals that at least some Broadcom
PHYs default to being not only isolated but also powered down after a reset
and while they just work fine [sic] when both is the case they don't if they
are only deisolate but still powered down. So in order to put PHYs in an
overall normal operation mode for the common case, ensure in mii_phy_reset()
that they are not powered down after a reset. Unfortunately, this only helps
in case of BCM5421, while BCM5709S apparently only work when they remain
isolated and powered down after a reset. So don't call mii_phy_reset() in
brgphy_reset() and implement the reset locally leaving the problematic bits
alone. Effectively this bypasses r221812 for brgphy(4).
Thanks to Justin Hibbits for doing a binary search in order to identify
the problematic commit.
pjd [Tue, 23 Aug 2011 07:00:51 +0000 (07:00 +0000)]
MFC r224791:
Eliminate the zfsdev_state_lock entirely and replace it with the
spa_namespace_lock. This fixes LOR between the spa_namespace_lock and
spa_config lock. LOR can cause deadlock on vdevs removal/insertion.
jhb [Mon, 22 Aug 2011 18:57:59 +0000 (18:57 +0000)]
MFC 224495:
Properly initialize an error variable to avoid returning uninitialized
data when 'show drives' succeeds, often resulting in a failing exit code
even though the command worked fine.
jhb [Mon, 22 Aug 2011 18:41:39 +0000 (18:41 +0000)]
MFC 224986:
One of the general principles of the sysctl(3) API is that a user can
query the needed size for a sysctl result by passing in a NULL old
pointer and a valid oldsize. The kern.proc.args sysctl handler broke
this assumption by not calling SYSCTL_OUT() if the old pointer was NULL.
jilles [Sun, 21 Aug 2011 20:59:51 +0000 (20:59 +0000)]
MFC r224865: tail: Fix crash if -F'ed file's filesystem disappears.
If tail notices that a file it is following no longer exists (because stat()
fails), it will output any final lines and then close the file. If the read
operation also causes an error, such as when the filesystem is forcefully
unmounted, it closes the file as well, leading to fclose(NULL) and a
segmentation fault.
mm [Sat, 20 Aug 2011 07:43:10 +0000 (07:43 +0000)]
MFC r224814, r224855:
MFC r224814 [1]:
Fix race between dmu_objset_prefetch() invoked from
zfs_ioc_dataset_list_next() and dsl_dir_destroy_check() indirectly
invoked from dmu_recv_existing_end() via dsl_dataset_destroy() by not
prefetching temporary clones, as these count as always inconsistent.
In addition, do not prefetch hidden datasets at all as we are not
going to process these later.
Filed as Illumos Bug #1346
MFC r224855:
zfs_ioctl.c: improve code readability in zfs_ioc_dataset_list_next()
zvol.c: fix calling of dmu_objset_prefetch() in zvol_create_minors()
by passing full instead of relative dataset name and prefetching all
visible datasets to be processed later instead of just the pool name
mm [Thu, 18 Aug 2011 07:34:11 +0000 (07:34 +0000)]
MFC r224605:
Fix panic in zfs_read() if IO_SYNC flag supplied by checking for
zfsvfs->z_log before calling zil_commit(). [1]
Do not call zfs_read() from zfs_getextattr() with the IO_SYNC flag.
Submitted by: Alexander Zagrebin <alex@zagrebin.ru> [1]
Reviewed by: pjd
zack [Thu, 18 Aug 2011 00:05:09 +0000 (00:05 +0000)]
MFC r224637:
Fix an NFS server issue where it was not correctly setting the eof flag when a
READ had hit the end of the file. Also, clean up some cruft in the code.
rmacklem [Wed, 17 Aug 2011 20:55:56 +0000 (20:55 +0000)]
MFC: r224606
Fix a LOR in the NFS client which could cause a deadlock.
This was reported to the mailing list freebsd-net@freebsd.org
on July 21, 2011 under the subject "LOR with nfsclient sillyrename".
The LOR occurred when nfs_inactive() called vrele(sp->s_dvp)
while holding the vnode lock on the file in s_dvp. This patch
modifies the client so that it performs the vrele(sp->s_dvp)
as a separate task to avoid the LOR. This fix was discussed
with jhb@ and kib@, who both proposed variations of it.
rmacklem [Wed, 17 Aug 2011 20:43:59 +0000 (20:43 +0000)]
MFC: r224604
Fix a LOR in the NFS client which could cause a deadlock.
This was reported to the mailing list freebsd-net@freebsd.org
on July 21, 2011 under the subject "LOR with nfsclient sillyrename".
The LOR occurred when nfs_inactive() called vrele(sp->s_dvp)
while holding the vnode lock on the file in s_dvp. This patch
modifies the client so that it performs the vrele(sp->s_dvp)
as a separate task to avoid the LOR. This fix was discussed
with jhb@ and kib@, who both proposed variations of it.
jh [Wed, 17 Aug 2011 15:22:58 +0000 (15:22 +0000)]
MFC r218411:
- Use LINE_MAX from limits.h as the maximum line length instead of
BUFSIZ. Use LINE_MAX * 2 as the buffer size (BSIZE).
- Error out if we encounter a line longer than LINE_MAX. The previous
behavior was to silently split long lines and produce corrupted
output.
mav [Tue, 16 Aug 2011 10:52:29 +0000 (10:52 +0000)]
MFC r224728:
Do not block zero report ID. It is correct value for devices with single
ID. This fixes USB_SET_IMMED call (synchronous operation) of the uhid(4)
driver on devices with single report ID.
yongari [Mon, 15 Aug 2011 17:08:54 +0000 (17:08 +0000)]
MFC r224506:
Add new device id of D-Link DGE-530T Rev. C controller. DGE-503T
Rev A1 and B1 is supported by sk(4) but the DGE-530T Rev. C
controller is re-branded RealTek 8169 controller.
mav [Mon, 15 Aug 2011 14:19:26 +0000 (14:19 +0000)]
MFC r224511:
- Fix usbhidctl and usbhidaction to handle HID devices with multiple
report ids, such as multimedia keyboards.
- Add collection type and report id to the `usbhidctl -r` output. They
are important for proper device understanding and debugging.
- Fix usbhidaction tool to properly handle items having report_count
more then 1.
rmacklem [Sun, 14 Aug 2011 00:55:18 +0000 (00:55 +0000)]
MFC: r224554
Fix rename in the new NFS server so that it does not require a
recursive vnode lock on the directory for the case where the
new file name is in the same directory as the old one. The patch
handles this as a special case, recognized by the new directory
having the same file handle as the old one and just VREF()s the old
dir vnode for this case, instead of doing a second VFS_FHTOVP() to get it.
This is required so that the server will work for file systems like
msdosfs, that do not support recursive vnode locking.
This problem was discovered during recent testing by pho@
when exporting an msdosfs file system via the new NFS server.
rmacklem [Sun, 14 Aug 2011 00:32:43 +0000 (00:32 +0000)]
MFC: r224532
The new NFS client failed to vput() the new vnode if a setattr
failed after the file was created in nfs_create(). This would
probably only happen during a forced dismount. The old NFS client
does have a vput() for this case. Detected by pho during recent
testing, where an open syscall returned with a vnode still locked.
jilles [Sat, 13 Aug 2011 21:33:50 +0000 (21:33 +0000)]
MFC r222716: sh: Fix $? in heredocs on simple commands.
The patch is slightly different because redirected compound commands are
handled differently in stable/8 (no separate function, redirection errors
are fatal).
zack [Sat, 13 Aug 2011 17:29:37 +0000 (17:29 +0000)]
MFC r224079 and r224121:
r224121 was meant to revert r224079, except I accidentally checked in an
additional ACL patch in r224121. Committing both of these ends up with just the
ACL fix. Here is the real commit note for the ACL patch:
Running pynfs verify/nverify tests produces a panic in nfsrv_compareacl(). This
patch fixes the panic.
zack [Sat, 13 Aug 2011 17:21:50 +0000 (17:21 +0000)]
MFC r224086:
Add DEXITCODE plumbing to NFS.
Isilon has the concept of an in-memory exit-code ring that saves the last exit
code of a function and allows for stack tracing. This is very helpful when
debugging tough issues.
This patch is essentially a no-op for BSD at this point, until we upstream
the dexitcode logic itself. The patch adds DEXITCODE calls to every NFS
function that returns an errno error code. A number of code paths were also
reorganized to have single exit paths, to reduce code duplication.
zack [Sat, 13 Aug 2011 17:19:24 +0000 (17:19 +0000)]
MFC: r224083
Simple find/replace of VOP_ISLOCKED -> NFSVOPISLOCKED. This is done so that
NFSVOPISLOCKED can be modified later to add enhanced logging and assertions.
zack [Sat, 13 Aug 2011 17:08:57 +0000 (17:08 +0000)]
MFC: r224077
Small acl patch to return the aclerror that comes back from
nfsrv_dissectacl(). This fixes a problem where ATTRNOTSUPP was being
returned instead of BADOWNER.
marius [Sat, 13 Aug 2011 13:15:27 +0000 (13:15 +0000)]
MFC: r224762
Sync makefs(8) ISO 9660 support with NetBSD:
o cd9960 -> cd9660
o Move inclusion of sys/endian.h from cd9660_eltorito.c to cd9660.h
since actual user is not cd9660_eltorito.c but iso.h and
cd9660_eltorito.h.
Actually, include order/place of sys/endian.h doesn't matter on
netbsd since it is always included by sys/types.h but it's not
true on other system. This should fix cross build breakage on
freebsd introduced by rev. 1.16 of cd9660_eltorito.c.
Problem reported and fix suggested on twitter.
o Fix fd leaks in error cases. Found by cppcheck.
o RRIP RE length should be 4, not 0
o Apply fixes for PR bin/44114 (makefs(8) -t cd9660 -o rockridge creates
corrupted cd9660fs), iso9660_rrip.c part:
- cd9660_rrip_finalize_node() should check rr_real_parent in node->parent,
not in node itself in RRIP_PL case
- cd9660_rrip_initialize_node() should update only node passed as arg
so handle RRIP_PL in DOTDOT case
Fixes malformed dotdot entries in deep (more than 8 level) directories
moved into .rr_moved dir.
Should be pulled up to netbsd-5.
(no official ISO has such deep dirs, but cobalt restorecd is affected)
marius [Sat, 13 Aug 2011 12:47:09 +0000 (12:47 +0000)]
MFC: r224683, r224693
The tid member of struct pthread actually is long so read it as such.
Accessing it as an int causes failure on big-endian LP64, i.e. mips64be,
powerpc64 and sparc64.
marius [Sat, 13 Aug 2011 12:43:33 +0000 (12:43 +0000)]
MFC: r224682
- Merge from r147740:
When the last, possibly partially filled buffer is flushed, we didn't
reset fragsz to 0 and as such would stop reflecting reality.
- Use __FBSDID.
- Wrap a too long line.
marius [Sat, 13 Aug 2011 12:37:22 +0000 (12:37 +0000)]
MFC: r224494, r224761
- Send the RELSIM_ADJUST_OPENINGS in response to a MPI_EVENT_QUEUE_FULL using
the right SIM in case the HBA is RAID-capable but the target in question is
not a hot spare or member of a RAID volume.
- Report the loss and addition of SAS and SATA targets detected via PHY link
status changes and signalled by MPI_EVENT_SAS_DEVICE_STATUS_CHANGE to cam(4)
as lost devices and trigger rescans as appropriate. Without this it can take
quite some time until a lost device actually is no longer tried to be used,
if it ever stops. [1]
- Handle MPI_EVENT_IR2, MPI_EVENT_LOG_ENTRY_ADDED, MPI_EVENT_SAS_DISCOVERY
and MPI_EVENT_SAS_PHY_LINK_STATUS silently as these serve no additional
purpose beyond adding cryptic entries to logs.
- Add a warning for MPI_EVENT_SAS_DISCOVERY_ERROR events, which can help
identifying broken disks. [2]
Thanks to Hans-Joerg Sirtl for providing one of the HBAs these changes were
developed with and RIP to the mainboard that didn't survive testing them.
marius [Sat, 13 Aug 2011 12:33:06 +0000 (12:33 +0000)]
MFC: r224493
- Staticize functions as appropriate and comment out unused ones.
- Sprinkle some const where appropriate.
- Consistently use target_id_t for the target parameter of mpt_map_physdisk()
and mpt_is_raid_volume().
- Fix some whitespace bugs.
marius [Sat, 13 Aug 2011 12:28:58 +0000 (12:28 +0000)]
MFC: r223985
- For SAS but neither FC nor SPI controllers default to using MSI/MSI-X
(still allowing their use to be disabled via device hints though). This
matches what the corresponding Linux driver provided by LSI does. Tested
with SAS1064.
- There's no need to keep track of the RIDs used.
- Don't allocate MSI/MSI-X as RF_SHAREABLE.
- Remove a comment which no longer applies since r209599 (MFC'ed to stable/8
in r210376).
- Assign NULL rather than 0 to pointers.
mm [Wed, 10 Aug 2011 08:40:59 +0000 (08:40 +0000)]
MFC r224691, r224700 [1]:
MFC r224961:
Add compatibility for ISO images created with unfixed makefs that
violated ECMA-119 (ISO9660): allow reserved4 to be 0x20 in PVD.
This allows tar to read FreeBSD distribution ISO images created
with makefs prior to NetBSD bin/45217 bugfix (up to 9.0-BETA1).
In addition, merge following important bugfixes from
libarchive's release/2.8 branch:
Revision 2812:
Merge 2811 from trunk: Don't try to verify that compression-level=0
produces larger results than the default compression, since this isn't
true for all versions of liblzma.
Revision 2820:
Fix issue 119.
Change the file location check that a file location does not exceed
volume block. New one is that a file content does not exceed volume
block(end of an ISO image). It is better than previous check even
if the issue did not happen.
While reading an ISO image generated by an older version of mkisofs
utility, a file location indicates the end the ISO image if its file
size is zero and it is the last file of all files of the ISO image,
so it is possible that the location value is the same as the number
of the total block of the ISO image.
Revision 2958:
Followup on Issue 134:
1) Port test_open_failure to libarchive 2.8 branch to test
the problem reported in Issue 134.
This test also shows that archive_read_open() sometimes
fails to report open errors correctly.
2) Fix the bug in archive_read.c
3) Comment out the tests that close functions are invoked
promptly when open fails; that's fully fixed in libarchive 3.0,
but I don't think it's worth fixing here.
Revision 3484:
Use uintmax_t with %ju
Revision 3487:
Fix issue 163.
Correctly allocate enough memory for a input buffer saved.
Revision 3542:
Merge 2516, 2536 from trunk: Allow path table offset values of
0 and 18, which are used by some ISO writers.
MFC r224700 [1]:
Merge revision 3554 from libarchive's release/2.8 branch:
Partial merge of 2431 from trunk: Retry writes on EINTR.
This should fix the SIGINT handler in bsdtar.
Note: The rest of r2431 can't be merged, since it interacts
with a big write-side rearchitecture.
Fix NetBSD PR bin/45217:
makefs creates ISO9660 images that violate the ECMA-119 (ISO9660)
specification. This is caused by erroneously writing 32 bytes
with value 0x20 to the volume_set_id field and 128 bytes with value 0x20
to the the following 37-byte fields in the PVD:
copyright_file_id, abstract_file_id, bibliographic_file_id
This causes, among other unwanted results the reserved4 field to be
overwritten with the value 0x20. To comply with the specification,
this field muse be zero. As a result, all FreeBSD distribution
ISO images created with makefs have not been 100% valid ISO9660 files.
mav [Tue, 9 Aug 2011 07:35:56 +0000 (07:35 +0000)]
MFC r224603:
Do not force AHCI mode on NVIDIA MCP89 SATA controllers. Recent Apple
Mac with this chipset does not initialize AHCI mode unless it is started
from EFI loader. However, legacy ATA mode works.
emaste [Mon, 8 Aug 2011 13:56:27 +0000 (13:56 +0000)]
MFC r224047:
Remove note that claims pthread_set_name_np is for debugging only.
As Garrett points out,
It is no more a debugging interface than setproctitle(3), and has not
been since the name started getting stuffed into the kernel. This
statement may have made sense when the name was only visible in thread
state dumps and the debugger.
kib [Mon, 8 Aug 2011 08:22:15 +0000 (08:22 +0000)]
MFC r224581:
Fix the LK_NOSHARE lockmgr flag interaction with LK_UPGRADE and
LK_DOWNGRADE lock ops. Namely, the ops should be NOP since LK_NOSHARE
locks are always exclusive.
mav [Sun, 7 Aug 2011 17:30:03 +0000 (17:30 +0000)]
MFC r224497:
Add control for ATA disk read-ahead, alike to the previously added write
cache control. Some controller BIOS'es tend to disable read-ahead, that
dramatically reduces read performance. Previously ata(4) always enabled
read-ahead unconditionally.
mav [Sun, 7 Aug 2011 17:28:08 +0000 (17:28 +0000)]
MFC r224496:
In some cases failed SATA disks may report their presence, but don't
respond to any commands. I've found, that because of multiple command
retries, each of which cause 30s timeout, bus reset and another retry or
requeue for many commands, it may take ages to eventually drop the
failed device. The odd thing is that those retries continue even after
XPT considered device as dead and invalidated it.
This patch makes cam_periph_error() to block any command retries after
periph was marked as invalid. With that patch all activity completes in
1-2 minutes, just after several timeouts, required to consider device
death. This should make ZFS, gmirror, graid, etc. operation more robust.
mav [Sun, 7 Aug 2011 17:19:59 +0000 (17:19 +0000)]
MFC r224531:
Higher-priority initialization request can eat request scheduling done from
adaclose(). Add immediate_priority check into adaschedule() to restore it.
mav [Sun, 7 Aug 2011 17:18:22 +0000 (17:18 +0000)]
MFC r224498:
In some cases, at least on Marvell 88SE912x controllers, Current Command
Slot field of the PxCMD register may point to an empty command slot.
That breaks command timeout detection logic, making impossible to find
what command actually caused timeout, and leading to infinite wait.
Workaround that by checking whether pointed command slot is really used
and can timeout in its time. And if not, fallback to the dumb algorithm
used with FBS -- let all commands to time out and then fail all of them.
kib [Sat, 6 Aug 2011 11:33:17 +0000 (11:33 +0000)]
MFC r224522:
Fix a race in the device pager allocation. If another thread won and
allocated the device pager for the given handle, then the object
fictitious pages list and the object membership in the global object
list still need to be initialized. Otherwise, dev_pager_dealloc() will
traverse uninitialized pointers.