From 4ef9a3d2c48ad16d30105060529f6d4fef2f68e9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 5 Oct 2012 16:57:16 -0700 Subject: [PATCH] librbd: load striping information when opening image Silently tolerate an -ENOEXEC or -EINVAL (which means striping is not present or is not supported by the osd class). Signed-off-by: Sage Weil --- src/librbd/ImageCtx.cc | 9 +++++++++ src/librbd/ImageCtx.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 52fd126d0b5bd..41e07352910d1 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -46,6 +46,7 @@ namespace librbd { refresh_lock("librbd::ImageCtx::refresh_lock"), old_format(true), order(0), size(0), features(0), id(image_id), parent(NULL), + stripe_unit(0), stripe_count(0), object_cacher(NULL), writeback_handler(NULL), object_set(NULL) { md_ctx.dup(p); @@ -123,6 +124,14 @@ namespace librbd { << cpp_strerror(r) << dendl; return r; } + + r = cls_client::get_stripe_unit_count(&md_ctx, header_oid, + &stripe_unit, &stripe_count); + if (r < 0 && r != -ENOEXEC && r != -EINVAL) { + lderr(cct) << "error reading striping metadata: " + << cpp_strerror(r) << dendl; + return r; + } } else { header_oid = old_header_name(name); } diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index 649bfc5fd41f6..58891bdb05904 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -76,6 +76,7 @@ namespace librbd { std::string id; // only used for new-format images parent_info parent_md; ImageCtx *parent; + uint64_t stripe_unit, stripe_count; ObjectCacher *object_cacher; LibrbdWriteback *writeback_handler; -- 2.39.5