hammer2 - hammer2 stat adjustments

* Report inodes as a count rather than as 'bytes'.
hammer2 - Implement meta-data statistics rollup

* HAMMER2 keeps total recursive data and inode count statistics in each
  inode.  This means that one can determine how much storage is being
  used for an entire subdirectory tree simply by doing a 'hammer2 stat <dir>'.

* Implement this by storing temporary rollup adjustments in the hammer2_chain
  structure, then synchronizing those adjustments on insertions, deletions,
  and flushes.

  Generally speaking, the chain structure has a data_count, inode_count,
  data_count_up, and inode_count_up for temporary tracking.  The main count
  fields are applied to the current chain AND the parent, while the *_up
  fields are only applied to the parent.

  For example, when an inode is inserted its stored statistics must be
  applied to the parent (recursively), but not to itself.

* Preliminary implementation.
hammer2 - major simplification 1/many (stabilization C)

* Remove lock-count test from write path where async reads can be
  queued.  Fixes false assertion.

* Deleted-but-still-open files are moved to a hidden directory, and on
  mount a scan is done to remove them.  The scan was improperly passing
  a NODATA flag when inode data is needed to do a proper stats rollup
  during the deletion.
hammer2 - Make snapshot directive more convenient

* Make the snapshot directive more intuitive.  The optional arguments
  are now (1) the <path> to snapshot and (2) the PFS label to use.
  If not specified, the PFS label is named after the PFS the snapshot
  is taken from, the last component of the path being snapshotted,
  and the date and time.

* pfs-list now takes an optional argument pointing at a mounted hammer2
  filesystem.  -s <path> still works, it just isn't as intuitive.
hammer2 - Get snapshots working again

* Clean up null-pointer dereference panics and sequencing issues when
  creating a snapshot.

* Fix panic on mount if the requested label is not found or is not
  mountable.

* Automatically flush the snapshot before taking and automatically flush
  the super-root entry before returning.
mps(4): Remove unnecessary assignment (cam_calc_geometry() sets it).
ciss(4): Add forgotten D_MPSAFE to dev_ops and use callout_init_mp().
mps(4): Add forgotten D_MPSAFE to dev_ops and use callout_init_mp().
kernel: Add D_MPSAFE to the ops of mfi(4), mrsas(4) and twa(4).

I overlooked it when I ported them.
kernel/usched: Make the bootverbose messages a bit more informative.

Talk about which scheduler this is about.

While here, change Sibs -> siblings.
mpt(4): Add D_MPSAFE to ops.
isp(4): Remove wrong D_DISK and add D_MPSAFE to ops.
kernel: Don't pass the size of the var as arg2 to sysctl_handle_int().

arg1 (second parameter) is for passing a variable and arg2 (third
parameter) is for passing a constant (in which case arg1 is NULL).
kernel/acpi_timer: Lower the bar for ACPI-fast on real and virtual machines.

This brings in FreeBSD's revisions 220331-220369:

r220369 | jkim | 2011-04-05 20:40:19 +0200 (Tue, 05 Apr 2011) | 6 lines

Lower the bar for ACPI-fast on real machines slightly.  Empirical evidences
show that there are perfectly working PM timers with occasional "hiccups",
probably because of an SMI.  Now we ignore the maximum if it happens once in
the test loop and the width is small enough.  Also, relax normal width a bit
to count in a boundary case.

------------------------------------------------------------------------
r220336 | jkim | 2011-04-04 19:44:26 +0200 (Mon, 04 Apr 2011) | 3 lines

Always check the current minimum value to make the test more predictable.
Use INT32_MAX instead of an arbitrary big number for the initial minimum.

------------------------------------------------------------------------
r220333 | jkim | 2011-04-04 19:00:50 +0200 (Mon, 04 Apr 2011) | 5 lines

Lower the bar for ACPI-fast on virtual machines.  The current logic depends
on the fact that real hardware has almost fixed cost to read the ACPI timer.
It is virtually always false for hardware emulation and it makes no sense to
read it multiple times, which is already quite expensive for full emulation.

------------------------------------------------------------------------
r220331 | jkim | 2011-04-04 18:47:42 +0200 (Mon, 04 Apr 2011) | 2 lines

Add inline to acpi_timer_read() to reduce unnecessary jumps and calls.
hammer2 - add crc checking skeleton

* Check meta-data crcs.  If verbose (-v) is specified, also check
  data crcs.
hammer2 - freemap and data check code

* Change the freemap to use 8 sets = ~32 reserved blocks instead of 14 sets.
  Use a straight iterator.  (TODO - must invalidate newer volumes if an older
  volume backup is mounted RW because freemap will become inconsistent).

* Update the freemap documentation.  Requires more work.

* MODIFY_OPTDATA can only skip to the end if chain->data is NULL in
  the BREF_TYPE_DATA case.  chain->data might not be NULL if the
  data chain represents a compressed device buffer.

* Add check code generation and testing.  Currently just kprintf()s a
  warning if the check code does not match.  Implement iscsi crc-32,
  sha-192 (this is sha-256 with the last 64 bits XOR'd into the first),
  and implement check generation and testing for all data, meta-data,
  and the freemap.  For Everything.  64-bit CRCs are not yet implemented.

* Fix a few cases where the DIO or the chain was not being properly
  dirtied prior to making modifications to the media contents via
  chain->data (this showed up because CRC tests were failing).

* Cleanup:

  - CHAIN_FORCECOW is no longer used, remove it.
  - Move FLUSH_DEPTH_LIMIT from hammer2.h to hammer2_flush.c.
  - Remove debug structures from the blockref check union.
  - Remove some #if 0'd code that is no longer applicable.