OSDService: add osdmap reservation mechanism

The goal here is to be able to get "reserved" refs
to next_map, and ensure that pgs won't see a newer
map until the ref is "released".  I haven't done
a cute RAII trick here yet...probably not worth
the effort.

Signed-off-by: Samuel Just <sam.just@inktank.com>
DispatchQueue: factor out pre_dispatch and post_dispatch

Signed-off-by: Samuel Just <sam.just@inktank.com>
Messenger,DispatchQueue: add ms_fast_dispatch mechanism

This adds a Dispatcher interface allowing the implementation
to accept ms_fast_dispatch calls for some messages without
going through the DispatchQueue.

TODO: before merging, make sure to add comments elucidating
precisely what guarantees you no longer have on
fast_dispatch'd messages.

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: add a pg_map_lock RWLock

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: replace handle_pg_scan, handle_pg_backfill with handle_replica_op

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: pass osdmap to handle_op handle_replica_op

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD::_share_map_incoming: line wrap debug output

Formatting only.

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD::_share_map_incoming: pass osdmap in explicitely

We'll want to be able to use this method without the osd_lock.

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD::send_incremental_map: use service superblock so we can avoid locking osd_lock

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: add session waiting_for_map mechanisms

This will replace the existing waiting_for_osdmap mechanism
with a per-session wait list.

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: remove wake_all_pg_waiters

We shouldn't need this -- we check the pg waiters list on each
map.

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: wake_pg_waiters atomically with pg_map update

Also, call enqueue_op directly rather than going back
through the entire dispatch machinery.

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: add dispatch_op_fast and supporting mechanisms

This patch adds a fast path for osd ops which bypasses
the osd_lock and should not block on any longly held
locks.

Signed-off-by: Samuel Just <sam.just@inktank.com>
Pipe: handle accept and connect syncronously

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: fill in Session in ms_handle_connect

Signed-off-by: Samuel Just <sam.just@inktank.com>
OSD: set up Session in ms_handle_accept

Signed-off-by: Samuel Just <sam.just@inktank.com>
RWLock: assert pthread function return values

Signed-off-by: Samuel Just <sam.just@inktank.com>