(void *)pew is one way to get a struct work *, but let's
write&pew->pew_work, instead. It is more defensive and persuasive.
Make miscellaneous changes in support of tearing down arbitrary
stacks of filesystems and devices during shutdown:
1 Move struct shutdown_state, shutdown_first(), and shutdown_next(),
from kern_pmf.c to subr_autoconf.c. Rename detach_all() to
config_detach_all(), and move it from kern_pmf.c to subr_autoconf.c.
Export all of those routines.
2 In pmf_system_shutdown(), do not suspend user process scheduling, and
do not detach all devices: I am going to do that in cpu_reboot(),
instead. (Soon I will do it in an MI cpu_reboot() routine.) Do still
call PMF shutdown hooks.
3 In config_detach(), add a DIAGNOSTIC assertion: if we're exiting
config_detach() at the bottom, alldevs_nwrite had better not be 0,
because config_detach() is a writer of the device list.
4 In deviter_release(), check to see if we're iterating the device list
for reading, *first*, and if so, decrease the number of readers. Used
to be that if we happened to be reading during shutdown, we ran the
shutdown branch. Thus the number of writers reached 0, the number
of readers remained > 0, and no writer could iterate again. Under
certain circumstances that would cause a hang during shutdown.
filesystem is mounted. Synchronize access to the number with a
mutex. When a struct mount, mp, is allocated, assign the current
generation number to mp->mnt_gen. Introduce vfs_unmount_forceone()
that forcefully unmounts the most recently mounted filesystem.
Refactor: extract vfs_shutdown1() from vfs_shutdown(). Extract
vfs_sync_all() from vfs_shutdown1().
Print more progress indications while we're unmounting all of the
filesystems during shutdown.
We increase the reference count on mp before calling dounmount(mp),
but we do not decrease it if dounmount(mp) fails, and neither does
dounmount(mp). So decrease the reference count if dounmount(mp)
fails.
Change the loop terminating condition in vfs_unmountall1() to (mp
!= (void *)&mountlist) from !CIRCLEQ_EMPTY(&mountlist), because we
may not ever empty the list, especially if we're not forcing the
filesystems to unmount.
- make sure that everything sets errno appropriately so we can use warn/err
- only open and setup bpf once since if this does not work we fail and don't
do extra work.
- use getprogname
- static local functions and no parameters.
I think this utility should be renamed wakeonlan because wake is too generic.
Ott: every ioctl but SIOCSIFFLAGS fails with ENXIO (Device not
configured). Let ioctls complete even if initialization is not
complete (!sc->attached). Do exit immediately from zyd_newstate
with ENXIO if !sc->attached, however: zyd_newstate tries to call
some USB routines for which it is probably not ready.
ethernet, allowing machines to be powered up without physical access to them.
tonnerre@ and tron@ reviewed it and decided that the bin directories
are not to full for this small and useful command.
Add some iscsi-specific changes too:
Portable iSCSI - 20080207 to 20090622
+ Use modern autoconf
+ Add portable iSCSI initiator sources
+ New directory structure
+ Put OSD sources in their own directory
+ iscsi.h -> iscsiprotocol.h
+ add an iscsi.h for the new interface, and install it
+ globals_t -> iscsi_target_t
+ made an iscsi-target.h with all public functions in it
+ reformatted Intel license to fit in 80 columns
+ get rid of some abstractions which aren't needed any more
+ move over to a set of (name, value) tuples in target and initiator
+ add patch to set the target's StatSN at login time, from Gleb Kozyrev via
Mark Foster
+ add manual page for libiscsi(3)
+ update libiscsi shared object major version to 2 to reflect the changes
in API and ABI
More changes to come
of free blocks on the device and when free blocks are getting tight it tries
to readjust/recalculate that value by syncing the FS.
Second stage will be resizing the data/metadata partitions.
from another fd's callback. That could lead to still have callback pending
after unmonitoring the fd resulting in a call to null pointer.
This is fixed by making unmonitor_fd now clear the pending fd_set too.
Bug was introduced by my commit in 2008-12-23.