ds_cache 1.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 2.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 3.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 4.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 5.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 5.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 6.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 7.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 8.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 9.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 10.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 10.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
ds_cache 11.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
Block in ds_cache_unref.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
Small export refactor for ds_cache.

Permit (future) async ds_cache operations.  This requires ensuring
any cached entry links an export handle (or makes it reachable, at
any rate).  This change adds a refcount for export handles, and
links export from struct ds_rsv.

The local OSD number result is also moved to the export handle, as
we'll need that too (and it doesn't change).

Signed-off-by: Matt Benjamin <matt@linuxbox.com>
Add shared Ceph mount indirection.

There is no defined mechanism for Ceph clients to interact with
multiple, distinct clusters yet (but presumably there will be).
For now, every object in a given Ceph env is by definition in the
same cluster, so sharing a single Ceph mount between exports is
the only case--but it should be the unmarked case when a way to
disambiguate Ceph clusters is added.  Then each export should have a
refcounted shared_ceph_mount object, and create_export (and later
destroy_export, etc) must do housekeeping accordingly.

Signed-off-by: Matt Benjamin <matt@linuxbox.com>