IoCtx& c_ioctx, const char *c_name, uint64_t features,
int *c_order)
{
- return librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
+ tracepoint(librbd, clone_enter, p_ioctx.get_pool_name().c_str(), p_ioctx.get_id(), p_name, p_snap_name, c_ioctx.get_pool_name().c_str(), c_ioctx.get_id(), c_name, features);
+ int r = librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
features, c_order, 0, 0);
+ tracepoint(librbd, clone_exit, r, *c_order);
+ return r;
}
int RBD::clone2(IoCtx& p_ioctx, const char *p_name, const char *p_snap_name,
IoCtx& c_ioctx, const char *c_name, uint64_t features,
int *c_order, uint64_t stripe_unit, int stripe_count)
{
- return librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
+ tracepoint(librbd, clone2_enter, p_ioctx.get_pool_name().c_str(), p_ioctx.get_id(), p_name, p_snap_name, c_ioctx.get_pool_name().c_str(), c_ioctx.get_id(), c_name, features, stripe_unit, stripe_count);
+ int r = librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
features, c_order, stripe_unit, stripe_count);
+ tracepoint(librbd, clone_exit, r, *c_order);
+ return r;
}
int RBD::remove(IoCtx& io_ctx, const char *name)
int RBD::list(IoCtx& io_ctx, vector<string>& names)
{
+ tracepoint(librbd, list_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id());
int r = librbd::list(io_ctx, names);
+ if (r >= 0) {
+ for (vector<string>::iterator itr = names.begin(), end = names.end(); itr != end; ++itr) {
+ tracepoint(librbd, list_entry, itr->c_str());
+ }
+ }
+ tracepoint(librbd, list_exit, r, r);
return r;
}
int Image::stat(image_info_t& info, size_t infosize)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::info(ictx, info, infosize);
+ tracepoint(librbd, stat_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::info(ictx, info, infosize);
+ tracepoint(librbd, stat_exit, r, &info);
+ return r;
}
int Image::old_format(uint8_t *old)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::get_old_format(ictx, old);
+ tracepoint(librbd, get_old_format_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_old_format(ictx, old);
+ tracepoint(librbd, get_old_format_exit, r, *old);
+ return r;
}
int Image::size(uint64_t *size)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::get_size(ictx, size);
+ tracepoint(librbd, get_size_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_size(ictx, size);
+ tracepoint(librbd, get_size_exit, r, *size);
+ return r;
}
int Image::features(uint64_t *features)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::get_features(ictx, features);
+ tracepoint(librbd, get_features_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_features(ictx, features);
+ tracepoint(librbd, get_features_exit, r, *features);
+ return r;
}
uint64_t Image::get_stripe_unit() const
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return ictx->get_stripe_unit();
+ tracepoint(librbd, get_stripe_unit_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ uint64_t stripe_unit = ictx->get_stripe_unit();
+ tracepoint(librbd, get_stripe_unit_exit, 0, stripe_unit);
+ return stripe_unit;
}
uint64_t Image::get_stripe_count() const
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return ictx->get_stripe_count();
+ tracepoint(librbd, get_stripe_count_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ uint64_t stripe_count = ictx->get_stripe_count();
+ tracepoint(librbd, get_stripe_count_exit, 0, stripe_count);
+ return stripe_count;
}
int Image::overlap(uint64_t *overlap)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::get_overlap(ictx, overlap);
+ tracepoint(librbd, get_overlap_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_overlap(ictx, overlap);
+ tracepoint(librbd, get_overlap_exit, r, *overlap);
+ return r;
}
int Image::parent_info(string *parent_pool_name, string *parent_name,
string *parent_snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::get_parent_info(ictx, parent_pool_name, parent_name,
+ tracepoint(librbd, get_parent_info_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_parent_info(ictx, parent_pool_name, parent_name,
parent_snap_name);
+ tracepoint(librbd, get_parent_info_exit, r, parent_pool_name ? parent_pool_name->c_str() : NULL, parent_name ? parent_name->c_str() : NULL, parent_snap_name ? parent_snap_name->c_str() : NULL);
+ return r;
}
int Image::copy(IoCtx& dest_io_ctx, const char *destname)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, destname);
+ tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, dest_io_ctx.get_pool_name().c_str(), dest_io_ctx.get_id(), destname);
librbd::NoOpProgressContext prog_ctx;
int r = librbd::copy(ictx, dest_io_ctx, destname, prog_ctx);
tracepoint(librbd, copy_exit, r);
librbd::ProgressContext &pctx)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, destname);
+ tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, dest_io_ctx.get_pool_name().c_str(), dest_io_ctx.get_id(), destname);
int r = librbd::copy(ictx, dest_io_ctx, destname, pctx);
tracepoint(librbd, copy_exit, r);
return r;
int Image::flatten()
{
ImageCtx *ictx = (ImageCtx *)ctx;
+ tracepoint(librbd, flatten_enter, ictx, ictx->name.c_str(), ictx->id.c_str());
librbd::NoOpProgressContext prog_ctx;
- return librbd::flatten(ictx, prog_ctx);
+ int r = librbd::flatten(ictx, prog_ctx);
+ tracepoint(librbd, flatten_exit, r);
+ return r;
}
int Image::flatten_with_progress(librbd::ProgressContext& prog_ctx)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::flatten(ictx, prog_ctx);
+ tracepoint(librbd, flatten_enter, ictx, ictx->name.c_str(), ictx->id.c_str());
+ int r = librbd::flatten(ictx, prog_ctx);
+ tracepoint(librbd, flatten_exit, r);
+ return r;
}
int Image::list_children(set<pair<string, string> > *children)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::list_children(ictx, *children);
+ tracepoint(librbd, list_children_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::list_children(ictx, *children);
+ if (r >= 0) {
+ for (set<pair<string, string> >::const_iterator it = children->begin();
+ it != children->end(); ++it) {
+ tracepoint(librbd, list_children_entry, it->first.c_str(), it->second.c_str());
+ }
+ }
+ tracepoint(librbd, list_children_exit, r);
+ return r;
}
int Image::list_lockers(std::list<librbd::locker_t> *lockers,
bool *exclusive, string *tag)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::list_lockers(ictx, lockers, exclusive, tag);
+ tracepoint(librbd, list_lockers_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::list_lockers(ictx, lockers, exclusive, tag);
+ if (r >= 0) {
+ for (std::list<librbd::locker_t>::const_iterator it = lockers->begin();
+ it != lockers->end(); ++it) {
+ tracepoint(librbd, list_lockers_entry, it->client.c_str(), it->cookie.c_str(), it->address.c_str());
+ }
+ }
+ tracepoint(librbd, list_lockers_exit, r);
+ return r;
}
int Image::lock_exclusive(const string& cookie)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::lock(ictx, true, cookie, "");
+ tracepoint(librbd, lock_exclusive_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, cookie.c_str());
+ int r = librbd::lock(ictx, true, cookie, "");
+ tracepoint(librbd, lock_exclusive_exit, r);
+ return r;
}
int Image::lock_shared(const string& cookie, const std::string& tag)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::lock(ictx, false, cookie, tag);
+ tracepoint(librbd, lock_shared_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, cookie.c_str(), tag.c_str());
+ int r = librbd::lock(ictx, false, cookie, tag);
+ tracepoint(librbd, lock_shared_exit, r);
+ return r;
}
int Image::unlock(const string& cookie)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::unlock(ictx, cookie);
+ tracepoint(librbd, unlock_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, cookie.c_str());
+ int r = librbd::unlock(ictx, cookie);
+ tracepoint(librbd, unlock_exit, r);
+ return r;
}
int Image::break_lock(const string& client, const string& cookie)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::break_lock(ictx, client, cookie);
+ tracepoint(librbd, break_lock_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, client.c_str(), cookie.c_str());
+ int r = librbd::break_lock(ictx, client, cookie);
+ tracepoint(librbd, break_lock_exit, r);
+ return r;
}
int Image::snap_create(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_create(ictx, snap_name);
+ tracepoint(librbd, snap_create_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_create(ictx, snap_name);
+ tracepoint(librbd, snap_create_exit, r);
+ return r;
}
int Image::snap_remove(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_remove(ictx, snap_name);
+ tracepoint(librbd, snap_remove_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_remove(ictx, snap_name);
+ tracepoint(librbd, snap_remove_exit, r);
+ return r;
}
int Image::snap_rollback(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
+ tracepoint(librbd, snap_rollback_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
librbd::NoOpProgressContext prog_ctx;
- return librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ int r = librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ tracepoint(librbd, snap_rollback_exit, r);
+ return r;
}
int Image::snap_rollback_with_progress(const char *snap_name,
ProgressContext& prog_ctx)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ tracepoint(librbd, snap_rollback_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ tracepoint(librbd, snap_rollback_exit, r);
+ return r;
}
int Image::snap_protect(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_protect(ictx, snap_name);
+ tracepoint(librbd, snap_protect_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_protect(ictx, snap_name);
+ tracepoint(librbd, snap_protect_exit, r);
+ return r;
}
int Image::snap_unprotect(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_unprotect(ictx, snap_name);
+ tracepoint(librbd, snap_unprotect_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_unprotect(ictx, snap_name);
+ tracepoint(librbd, snap_unprotect_exit, r);
+ return r;
}
int Image::snap_is_protected(const char *snap_name, bool *is_protected)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_is_protected(ictx, snap_name, is_protected);
+ tracepoint(librbd, snap_is_protected_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_is_protected(ictx, snap_name, is_protected);
+ tracepoint(librbd, snap_is_protected_exit, r, *is_protected ? 1 : 0);
+ return r;
}
int Image::snap_list(vector<librbd::snap_info_t>& snaps)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_list(ictx, snaps);
+ tracepoint(librbd, snap_list_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, &snaps);
+ int r = librbd::snap_list(ictx, snaps);
+ if (r >= 0) {
+ for (int i = 0, n = snaps.size(); i < n; i++) {
+ tracepoint(librbd, snap_list_entry, snaps[i].id, snaps[i].size, snaps[i].name.c_str());
+ }
+ }
+ tracepoint(librbd, snap_list_exit, r, snaps.size());
+ if (r >= 0) {
+ // A little ugly, but the C++ API doesn't need a Image::snap_list_end,
+ // and we want the tracepoints to mirror the C API
+ tracepoint(librbd, snap_list_end_enter, &snaps);
+ tracepoint(librbd, snap_list_end_exit);
+ }
+ return r;
}
bool Image::snap_exists(const char *snap_name)
int Image::snap_set(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::snap_set(ictx, snap_name);
+ tracepoint(librbd, snap_set_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_set(ictx, snap_name);
+ tracepoint(librbd, snap_set_exit, r);
+ return r;
}
ssize_t Image::read(uint64_t ofs, size_t len, bufferlist& bl)
void *arg)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::read_iterate(ictx, ofs, len, cb, arg);
+ tracepoint(librbd, read_iterate_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
+ int64_t r = librbd::read_iterate(ictx, ofs, len, cb, arg);
+ tracepoint(librbd, read_iterate_exit, r);
+ return r;
}
int Image::read_iterate2(uint64_t ofs, uint64_t len,
void *arg)
{
ImageCtx *ictx = (ImageCtx *)ctx;
+ tracepoint(librbd, read_iterate2_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
int64_t r = librbd::read_iterate(ictx, ofs, len, cb, arg);
if (r > 0)
r = 0;
+ tracepoint(librbd, read_iterate2_exit, r);
return (int)r;
}
void *arg)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- return librbd::diff_iterate(ictx, fromsnapname, ofs, len, cb, arg);
+ tracepoint(librbd, diff_iterate_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, fromsnapname, ofs, len);
+ int r = librbd::diff_iterate(ictx, fromsnapname, ofs, len, cb, arg);
+ tracepoint(librbd, diff_iterate_exit, r);
+ return r;
}
ssize_t Image::write(uint64_t ofs, size_t len, bufferlist& bl)
{
librados::IoCtx io_ctx;
librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+ tracepoint(librbd, list_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id());
vector<string> cpp_names;
int r = librbd::list(io_ctx, cpp_names);
- if (r == -ENOENT)
+ if (r == -ENOENT) {
+ tracepoint(librbd, list_exit, 0, *size);
return 0;
+ }
- if (r < 0)
+ if (r < 0) {
+ tracepoint(librbd, list_exit, r, *size);
return r;
+ }
size_t expected_size = 0;
}
if (*size < expected_size) {
*size = expected_size;
+ tracepoint(librbd, list_exit, -ERANGE, *size);
return -ERANGE;
}
return -EINVAL;
for (int i = 0; i < (int)cpp_names.size(); i++) {
- strcpy(names, cpp_names[i].c_str());
+ const char* name = cpp_names[i].c_str();
+ tracepoint(librbd, list_entry, name);
+ strcpy(names, name);
names += strlen(names) + 1;
}
+ tracepoint(librbd, list_exit, (int)expected_size, *size);
return (int)expected_size;
}
librados::IoCtx p_ioc, c_ioc;
librados::IoCtx::from_rados_ioctx_t(p_ioctx, p_ioc);
librados::IoCtx::from_rados_ioctx_t(c_ioctx, c_ioc);
- return librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
+ tracepoint(librbd, clone_enter, p_ioc.get_pool_name().c_str(), p_ioc.get_id(), p_name, p_snap_name, c_ioc.get_pool_name().c_str(), c_ioc.get_id(), c_name, features);
+ int r = librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
features, c_order, 0, 0);
+ tracepoint(librbd, clone_exit, r, *c_order);
+ return r;
}
extern "C" int rbd_clone2(rados_ioctx_t p_ioctx, const char *p_name,
librados::IoCtx p_ioc, c_ioc;
librados::IoCtx::from_rados_ioctx_t(p_ioctx, p_ioc);
librados::IoCtx::from_rados_ioctx_t(c_ioctx, c_ioc);
- return librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
+ tracepoint(librbd, clone2_enter, p_ioc.get_pool_name().c_str(), p_ioc.get_id(), p_name, p_snap_name, c_ioc.get_pool_name().c_str(), c_ioc.get_id(), c_name, features, stripe_unit, stripe_count);
+ int r = librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
features, c_order, stripe_unit, stripe_count);
+ tracepoint(librbd, clone2_exit, r, *c_order);
+ return r;
}
extern "C" int rbd_remove(rados_ioctx_t p, const char *name)
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
librados::IoCtx dest_io_ctx;
librados::IoCtx::from_rados_ioctx_t(dest_p, dest_io_ctx);
+ tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, dest_io_ctx.get_pool_name().c_str(), dest_io_ctx.get_id(), destname);
librbd::NoOpProgressContext prog_ctx;
- return librbd::copy(ictx, dest_io_ctx, destname, prog_ctx);
+ int r = librbd::copy(ictx, dest_io_ctx, destname, prog_ctx);
+ tracepoint(librbd, copy_exit, r);
+ return r;
}
extern "C" int rbd_copy2(rbd_image_t srcp, rbd_image_t destp)
{
librbd::ImageCtx *src = (librbd::ImageCtx *)srcp;
librbd::ImageCtx *dest = (librbd::ImageCtx *)destp;
+ tracepoint(librbd, copy2_enter, src, src->name.c_str(), src->snap_name.c_str(), src->read_only, dest, dest->name.c_str(), dest->snap_name.c_str(), dest->read_only);
librbd::NoOpProgressContext prog_ctx;
- return librbd::copy(src, dest, prog_ctx);
+ int r = librbd::copy(src, dest, prog_ctx);
+ tracepoint(librbd, copy2_exit, r);
+ return r;
}
extern "C" int rbd_copy_with_progress(rbd_image_t image, rados_ioctx_t dest_p,
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
librados::IoCtx dest_io_ctx;
librados::IoCtx::from_rados_ioctx_t(dest_p, dest_io_ctx);
+ tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, dest_io_ctx.get_pool_name().c_str(), dest_io_ctx.get_id(), destname);
librbd::CProgressContext prog_ctx(fn, data);
int ret = librbd::copy(ictx, dest_io_ctx, destname, prog_ctx);
+ tracepoint(librbd, copy_exit, ret);
return ret;
}
{
librbd::ImageCtx *src = (librbd::ImageCtx *)srcp;
librbd::ImageCtx *dest = (librbd::ImageCtx *)destp;
+ tracepoint(librbd, copy2_enter, src, src->name.c_str(), src->snap_name.c_str(), src->read_only, dest, dest->name.c_str(), dest->snap_name.c_str(), dest->read_only);
librbd::CProgressContext prog_ctx(fn, data);
int ret = librbd::copy(src, dest, prog_ctx);
+ tracepoint(librbd, copy2_exit, ret);
return ret;
}
extern "C" int rbd_flatten(rbd_image_t image)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, flatten_enter, ictx, ictx->name.c_str(), ictx->id.c_str());
librbd::NoOpProgressContext prog_ctx;
- return librbd::flatten(ictx, prog_ctx);
+ int r = librbd::flatten(ictx, prog_ctx);
+ tracepoint(librbd, flatten_exit, r);
+ return r;
}
extern "C" int rbd_flatten_with_progress(rbd_image_t image,
librbd_progress_fn_t cb, void *cbdata)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, flatten_enter, ictx, ictx->name.c_str(), ictx->id.c_str());
librbd::CProgressContext prog_ctx(cb, cbdata);
- return librbd::flatten(ictx, prog_ctx);
+ int r = librbd::flatten(ictx, prog_ctx);
+ tracepoint(librbd, flatten_exit, r);
+ return r;
}
extern "C" int rbd_rename(rados_ioctx_t src_p, const char *srcname,
size_t infosize)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::info(ictx, *info, infosize);
+ tracepoint(librbd, stat_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::info(ictx, *info, infosize);
+ tracepoint(librbd, stat_exit, r, info);
+ return r;
}
extern "C" int rbd_get_old_format(rbd_image_t image, uint8_t *old)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::get_old_format(ictx, old);
+ tracepoint(librbd, get_old_format_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_old_format(ictx, old);
+ tracepoint(librbd, get_old_format_exit, r, *old);
+ return r;
}
extern "C" int rbd_get_size(rbd_image_t image, uint64_t *size)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::get_size(ictx, size);
+ tracepoint(librbd, get_size_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_size(ictx, size);
+ tracepoint(librbd, get_size_exit, r, *size);
+ return r;
}
extern "C" int rbd_get_features(rbd_image_t image, uint64_t *features)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::get_features(ictx, features);
+ tracepoint(librbd, get_features_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_features(ictx, features);
+ tracepoint(librbd, get_features_exit, r, *features);
+ return r;
}
extern "C" int rbd_get_stripe_unit(rbd_image_t image, uint64_t *stripe_unit)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, get_stripe_unit_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
*stripe_unit = ictx->get_stripe_unit();
+ tracepoint(librbd, get_stripe_unit_exit, 0, *stripe_unit);
return 0;
}
extern "C" int rbd_get_stripe_count(rbd_image_t image, uint64_t *stripe_count)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, get_stripe_count_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
*stripe_count = ictx->get_stripe_count();
+ tracepoint(librbd, get_stripe_count_exit, 0, *stripe_count);
return 0;
}
extern "C" int rbd_get_overlap(rbd_image_t image, uint64_t *overlap)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::get_overlap(ictx, overlap);
+ tracepoint(librbd, get_overlap_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
+ int r = librbd::get_overlap(ictx, overlap);
+ tracepoint(librbd, get_overlap_exit, r, *overlap);
+ return r;
}
extern "C" int rbd_get_parent_info(rbd_image_t image,
size_t pnamelen, char *parent_snap_name, size_t psnap_namelen)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, get_parent_info_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
string p_pool_name, p_name, p_snap_name;
int r = librbd::get_parent_info(ictx, &p_pool_name, &p_name, &p_snap_name);
- if (r < 0)
+ if (r < 0) {
+ tracepoint(librbd, get_parent_info_exit, r, NULL, NULL, NULL);
return r;
+ }
if (parent_pool_name) {
- if (p_pool_name.length() + 1 > ppool_namelen)
+ if (p_pool_name.length() + 1 > ppool_namelen) {
+ tracepoint(librbd, get_parent_info_exit, -ERANGE, NULL, NULL, NULL);
return -ERANGE;
+ }
strcpy(parent_pool_name, p_pool_name.c_str());
}
if (parent_name) {
- if (p_name.length() + 1 > pnamelen)
+ if (p_name.length() + 1 > pnamelen) {
+ tracepoint(librbd, get_parent_info_exit, -ERANGE, NULL, NULL, NULL);
return -ERANGE;
+ }
strcpy(parent_name, p_name.c_str());
}
if (parent_snap_name) {
- if (p_snap_name.length() + 1 > psnap_namelen)
+ if (p_snap_name.length() + 1 > psnap_namelen) {
+ tracepoint(librbd, get_parent_info_exit, -ERANGE, NULL, NULL, NULL);
return -ERANGE;
+ }
strcpy(parent_snap_name, p_snap_name.c_str());
}
+ tracepoint(librbd, get_parent_info_exit, 0, parent_pool_name, parent_name, parent_snap_name);
return 0;
}
extern "C" int rbd_snap_create(rbd_image_t image, const char *snap_name)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::snap_create(ictx, snap_name);
+ tracepoint(librbd, snap_create_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_create(ictx, snap_name);
+ tracepoint(librbd, snap_create_exit, r);
+ return r;
}
extern "C" int rbd_snap_remove(rbd_image_t image, const char *snap_name)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::snap_remove(ictx, snap_name);
+ tracepoint(librbd, snap_remove_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_remove(ictx, snap_name);
+ tracepoint(librbd, snap_remove_exit, r);
+ return r;
}
extern "C" int rbd_snap_rollback(rbd_image_t image, const char *snap_name)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, snap_rollback_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
librbd::NoOpProgressContext prog_ctx;
- return librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ int r = librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ tracepoint(librbd, snap_rollback_exit, r);
+ return r;
}
extern "C" int rbd_snap_rollback_with_progress(rbd_image_t image,
void *cbdata)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, snap_rollback_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
librbd::CProgressContext prog_ctx(cb, cbdata);
- return librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ int r = librbd::snap_rollback(ictx, snap_name, prog_ctx);
+ tracepoint(librbd, snap_rollback_exit, r);
+ return r;
}
extern "C" int rbd_snap_list(rbd_image_t image, rbd_snap_info_t *snaps,
{
vector<librbd::snap_info_t> cpp_snaps;
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, snap_list_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snaps);
int r = librbd::snap_list(ictx, cpp_snaps);
- if (r == -ENOENT)
+ if (r == -ENOENT) {
+ tracepoint(librbd, snap_list_exit, 0, *max_snaps);
return 0;
- if (r < 0)
+ }
+ if (r < 0) {
+ tracepoint(librbd, snap_list_exit, r, *max_snaps);
return r;
- if (!max_snaps)
+ }
+ if (!max_snaps) {
+ tracepoint(librbd, snap_list_exit, -EINVAL, *max_snaps);
return -EINVAL;
+ }
if (*max_snaps < (int)cpp_snaps.size() + 1) {
*max_snaps = (int)cpp_snaps.size() + 1;
+ tracepoint(librbd, snap_list_exit, -ERANGE, *max_snaps);
return -ERANGE;
}
if (!snaps[i].name) {
for (int j = 0; j < i; j++)
free((void *)snaps[j].name);
+ tracepoint(librbd, snap_list_exit, -ENOMEM, *max_snaps);
return -ENOMEM;
}
+ tracepoint(librbd, snap_list_entry, snaps[i].id, snaps[i].size, snaps[i].name);
}
snaps[i].id = 0;
snaps[i].size = 0;
snaps[i].name = NULL;
- return (int)cpp_snaps.size();
+ r = (int)cpp_snaps.size();
+ tracepoint(librbd, snap_list_exit, r, *max_snaps);
+ return r;
}
extern "C" void rbd_snap_list_end(rbd_snap_info_t *snaps)
{
+ tracepoint(librbd, snap_list_end_enter, snaps);
while (snaps->name) {
free((void *)snaps->name);
snaps++;
}
+ tracepoint(librbd, snap_list_end_exit);
}
extern "C" int rbd_snap_protect(rbd_image_t image, const char *snap_name)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::snap_protect(ictx, snap_name);
+ tracepoint(librbd, snap_protect_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_protect(ictx, snap_name);
+ tracepoint(librbd, snap_protect_exit, r);
+ return r;
}
extern "C" int rbd_snap_unprotect(rbd_image_t image, const char *snap_name)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::snap_unprotect(ictx, snap_name);
+ tracepoint(librbd, snap_unprotect_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_unprotect(ictx, snap_name);
+ tracepoint(librbd, snap_unprotect_exit, r);
+ return r;
}
extern "C" int rbd_snap_is_protected(rbd_image_t image, const char *snap_name,
int *is_protected)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, snap_is_protected_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
bool protected_snap;
int r = librbd::snap_is_protected(ictx, snap_name, &protected_snap);
- if (r < 0)
+ if (r < 0) {
+ tracepoint(librbd, snap_is_protected_exit, r, *is_protected ? 1 : 0);
return r;
+ }
*is_protected = protected_snap ? 1 : 0;
+ tracepoint(librbd, snap_is_protected_exit, 0, *is_protected ? 1 : 0);
return 0;
}
extern "C" int rbd_snap_set(rbd_image_t image, const char *snap_name)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::snap_set(ictx, snap_name);
+ tracepoint(librbd, snap_set_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, snap_name);
+ int r = librbd::snap_set(ictx, snap_name);
+ tracepoint(librbd, snap_set_exit, r);
+ return r;
}
extern "C" ssize_t rbd_list_children(rbd_image_t image, char *pools,
size_t *images_len)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, list_children_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
set<pair<string, string> > image_set;
int r = librbd::list_children(ictx, image_set);
- if (r < 0)
+ if (r < 0) {
+ tracepoint(librbd, list_children_exit, r);
return r;
+ }
size_t pools_total = 0;
size_t images_total = 0;
too_short = true;
*pools_len = pools_total;
*images_len = images_total;
- if (too_short)
+ if (too_short) {
+ tracepoint(librbd, list_children_exit, -ERANGE);
return -ERANGE;
+ }
char *pools_p = pools;
char *images_p = images;
for (set<pair<string, string> >::const_iterator it = image_set.begin();
it != image_set.end(); ++it) {
- strcpy(pools_p, it->first.c_str());
+ const char* pool = it->first.c_str();
+ strcpy(pools_p, pool);
pools_p += it->first.length() + 1;
- strcpy(images_p, it->second.c_str());
+ const char* image = it->second.c_str();
+ strcpy(images_p, image);
images_p += it->second.length() + 1;
+ tracepoint(librbd, list_children_entry, pool, image);
}
- return image_set.size();
+ ssize_t ret = image_set.size();
+ tracepoint(librbd, list_children_exit, ret);
+ return ret;
}
extern "C" ssize_t rbd_list_lockers(rbd_image_t image, int *exclusive,
char *addrs, size_t *addrs_len)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, list_lockers_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
std::list<librbd::locker_t> lockers;
bool exclusive_bool;
string tag_str;
int r = list_lockers(ictx, &lockers, &exclusive_bool, &tag_str);
- if (r < 0)
+ if (r < 0) {
+ tracepoint(librbd, list_lockers_exit, r);
return r;
+ }
ldout(ictx->cct, 20) << "list_lockers r = " << r << " lockers.size() = " << lockers.size() << dendl;
*cookies_len = cookies_total;
*addrs_len = addrs_total;
*tag_len = tag_str.length() + 1;
- if (too_short)
+ if (too_short) {
+ tracepoint(librbd, list_lockers_exit, -ERANGE);
return -ERANGE;
+ }
strcpy(tag, tag_str.c_str());
char *clients_p = clients;
char *addrs_p = addrs;
for (list<librbd::locker_t>::const_iterator it = lockers.begin();
it != lockers.end(); ++it) {
- strcpy(clients_p, it->client.c_str());
+ const char* client = it->client.c_str();
+ strcpy(clients_p, client);
clients_p += it->client.length() + 1;
- strcpy(cookies_p, it->cookie.c_str());
+ const char* cookie = it->cookie.c_str();
+ strcpy(cookies_p, cookie);
cookies_p += it->cookie.length() + 1;
- strcpy(addrs_p, it->address.c_str());
+ const char* address = it->address.c_str();
+ strcpy(addrs_p, address);
addrs_p += it->address.length() + 1;
+ tracepoint(librbd, list_lockers_entry, client, cookie, address);
}
- return lockers.size();
+ ssize_t ret = lockers.size();
+ tracepoint(librbd, list_lockers_exit, ret);
+ return ret;
}
extern "C" int rbd_lock_exclusive(rbd_image_t image, const char *cookie)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::lock(ictx, true, cookie ? cookie : "", "");
+ tracepoint(librbd, lock_exclusive_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, cookie);
+ int r = librbd::lock(ictx, true, cookie ? cookie : "", "");
+ tracepoint(librbd, lock_exclusive_exit, r);
+ return r;
}
extern "C" int rbd_lock_shared(rbd_image_t image, const char *cookie,
const char *tag)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::lock(ictx, false, cookie ? cookie : "", tag ? tag : "");
+ tracepoint(librbd, lock_shared_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, cookie, tag);
+ int r = librbd::lock(ictx, false, cookie ? cookie : "", tag ? tag : "");
+ tracepoint(librbd, lock_shared_exit, r);
+ return r;
}
extern "C" int rbd_unlock(rbd_image_t image, const char *cookie)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::unlock(ictx, cookie ? cookie : "");
+ tracepoint(librbd, unlock_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, cookie);
+ int r = librbd::unlock(ictx, cookie ? cookie : "");
+ tracepoint(librbd, unlock_exit, r);
+ return r;
}
extern "C" int rbd_break_lock(rbd_image_t image, const char *client,
const char *cookie)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::break_lock(ictx, client, cookie ? cookie : "");
+ tracepoint(librbd, break_lock_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, client, cookie);
+ int r = librbd::break_lock(ictx, client, cookie ? cookie : "");
+ tracepoint(librbd, break_lock_exit, r);
+ return r;
}
/* I/O */
void *arg)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::read_iterate(ictx, ofs, len, cb, arg);
+ tracepoint(librbd, read_iterate_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
+ int64_t r = librbd::read_iterate(ictx, ofs, len, cb, arg);
+ tracepoint(librbd, read_iterate_exit, r);
+ return r;
}
extern "C" int rbd_read_iterate2(rbd_image_t image, uint64_t ofs, uint64_t len,
void *arg)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ tracepoint(librbd, read_iterate2_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
int64_t r = librbd::read_iterate(ictx, ofs, len, cb, arg);
if (r > 0)
r = 0;
+ tracepoint(librbd, read_iterate2_exit, r);
return (int)r;
}
void *arg)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- return librbd::diff_iterate(ictx, fromsnapname, ofs, len, cb, arg);
+ tracepoint(librbd, diff_iterate_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, fromsnapname, ofs, len);
+ int r = librbd::diff_iterate(ictx, fromsnapname, ofs, len, cb, arg);
+ tracepoint(librbd, diff_iterate_exit, r);
+ return r;
}
extern "C" ssize_t rbd_write(rbd_image_t image, uint64_t ofs, size_t len,
)
)
+TRACEPOINT_EVENT(librbd, read_iterate_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ uint64_t, offset,
+ uint64_t, length),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_integer(uint64_t, offset, offset)
+ ctf_integer(uint64_t, length, length)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, read_iterate_exit,
+ TP_ARGS(
+ int64_t, retval),
+ TP_FIELDS(
+ ctf_integer(int64_t, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, read_iterate2_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ uint64_t, offset,
+ uint64_t, length),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_integer(uint64_t, offset, offset)
+ ctf_integer(uint64_t, length, length)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, read_iterate2_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
TRACEPOINT_EVENT(librbd, write_enter,
TP_ARGS(
void*, imagectx,
TP_FIELDS()
)
+TRACEPOINT_EVENT(librbd, list_enter,
+ TP_ARGS(
+ const char*, pool_name,
+ int64_t, id),
+ TP_FIELDS(
+ ctf_string(pool_name, pool_name)
+ ctf_integer(int64_t, id, id)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_entry,
+ TP_ARGS(
+ const char*, name),
+ TP_FIELDS(
+ ctf_string(name, name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_exit,
+ TP_ARGS(
+ int, retval,
+ int, size),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(size_t, size, size)
+ )
+)
+
TRACEPOINT_EVENT(librbd, create_enter,
TP_ARGS(
const char*, pool_name,
const char*, src_name,
const char*, src_snap_name,
char, src_read_only,
+ const char*, dst_pool_name,
+ uint64_t, dst_id,
const char*, dst_name),
TP_FIELDS(
ctf_integer_hex(void*, src_imagectx, src_imagectx)
ctf_string(src_name, src_name)
ctf_string(src_snap_name, src_snap_name)
ctf_integer(char, src_read_only, src_read_only)
+ ctf_string(dst_pool_name, dst_pool_name)
+ ctf_integer(uint64_t, dst_id, dst_id)
ctf_string(dst_name, dst_name)
)
)
TP_ARGS(),
TP_FIELDS()
)
+
+TRACEPOINT_EVENT(librbd, clone_enter,
+ TP_ARGS(
+ const char*, parent_pool_name,
+ uint64_t, parent_id,
+ const char*, parent_name,
+ const char*, parent_snap_name,
+ const char*, child_pool_name,
+ uint64_t, child_id,
+ const char*, child_name,
+ uint64_t, features),
+ TP_FIELDS(
+ ctf_string(parent_pool_name, parent_pool_name)
+ ctf_integer(uint64_t, parent_id, parent_id)
+ ctf_string(parent_name, parent_name)
+ ctf_string(parent_snap_name, parent_snap_name)
+ ctf_string(child_pool_name, child_pool_name)
+ ctf_integer(uint64_t, child_id, child_id)
+ ctf_string(child_name, child_name)
+ ctf_integer(uint64_t, features, features)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, clone_exit,
+ TP_ARGS(
+ int, retval,
+ int, order),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(int, order, order)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, clone2_enter,
+ TP_ARGS(
+ const char*, parent_pool_name,
+ uint64_t, parent_id,
+ const char*, parent_name,
+ const char*, parent_snap_name,
+ const char*, child_pool_name,
+ uint64_t, child_id,
+ const char*, child_name,
+ uint64_t, features,
+ uint64_t, stripe_unit,
+ int, stripe_count),
+ TP_FIELDS(
+ ctf_string(parent_pool_name, parent_pool_name)
+ ctf_integer(uint64_t, parent_id, parent_id)
+ ctf_string(parent_name, parent_name)
+ ctf_string(parent_snap_name, parent_snap_name)
+ ctf_string(child_pool_name, child_pool_name)
+ ctf_integer(uint64_t, child_id, child_id)
+ ctf_string(child_name, child_name)
+ ctf_integer(uint64_t, features, features)
+ ctf_integer(uint64_t, stripe_unit, stripe_unit)
+ ctf_integer(int, stripe_count, stripe_count)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, clone2_exit,
+ TP_ARGS(
+ int, retval,
+ int, order),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(int, order, order)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, flatten_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, id),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(id, id)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, flatten_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_create_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, create_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(create_snap_name, create_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_create_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_remove_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, remove_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(remove_snap_name, remove_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_remove_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_rollback_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, rollback_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(rollback_snap_name, rollback_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_rollback_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_list_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ void*, snaps),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_integer_hex(void*, snaps, snaps)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_list_entry,
+ TP_ARGS(
+ uint64_t, id,
+ uint64_t, size,
+ const char*, name),
+ TP_FIELDS(
+ ctf_integer(uint64_t, id, id)
+ ctf_integer(uint64_t, size, size)
+ ctf_string(name, name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_list_exit,
+ TP_ARGS(
+ int, retval,
+ int, max_snaps),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(int, max_snaps, max_snaps)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_list_end_enter,
+ TP_ARGS(
+ void*, snaps),
+ TP_FIELDS(
+ ctf_integer_hex(void*, snaps, snaps)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_list_end_exit,
+ TP_ARGS(),
+ TP_FIELDS()
+)
+
+TRACEPOINT_EVENT(librbd, snap_protect_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, protect_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(protect_snap_name, protect_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_protect_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_unprotect_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, unprotect_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(unprotect_snap_name, unprotect_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_unprotect_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_is_protected_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, is_protected_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(is_protected_snap_name, is_protected_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_is_protected_exit,
+ TP_ARGS(
+ int, retval,
+ int, is_protected),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(int, is_protected, is_protected)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_set_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, set_snap_name),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(set_snap_name, set_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, snap_set_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_children_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_children_entry,
+ TP_ARGS(
+ const char*, pool,
+ const char*, image),
+ TP_FIELDS(
+ ctf_string(pool, pool)
+ ctf_string(image, image)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_children_exit,
+ TP_ARGS(
+ ssize_t, retval),
+ TP_FIELDS(
+ ctf_integer(ssize_t, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_lockers_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_lockers_entry,
+ TP_ARGS(
+ const char*, client,
+ const char*, cookie,
+ const char*, address),
+ TP_FIELDS(
+ ctf_string(client, client)
+ ctf_string(cookie, cookie)
+ ctf_string(address, address)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, list_lockers_exit,
+ TP_ARGS(
+ ssize_t, retval),
+ TP_FIELDS(
+ ctf_integer(ssize_t, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, lock_exclusive_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, cookie),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ceph_ctf_string(cookie, cookie)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, lock_exclusive_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, lock_shared_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, cookie,
+ const char*, tag),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ceph_ctf_string(cookie, cookie)
+ ceph_ctf_string(tag, tag)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, lock_shared_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, unlock_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, cookie),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ceph_ctf_string(cookie, cookie)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, unlock_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, break_lock_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, client,
+ const char*, cookie),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ceph_ctf_string(client, client)
+ ceph_ctf_string(cookie, cookie)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, break_lock_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, diff_iterate_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only,
+ const char*, from_snap_name,
+ uint64_t, offset,
+ uint64_t, length),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ ctf_string(from_snap_name, from_snap_name)
+ ctf_integer(uint64_t, offset, offset)
+ ctf_integer(uint64_t, length, length)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, diff_iterate_exit,
+ TP_ARGS(
+ int, retval),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_parent_info_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_parent_info_exit,
+ TP_ARGS(
+ int, retval,
+ const char*, parent_pool_name,
+ const char*, parent_name,
+ const char*, parent_snap_name),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ceph_ctf_string(parent_pool_name, parent_pool_name)
+ ceph_ctf_string(parent_name, parent_name)
+ ceph_ctf_string(parent_snap_name, parent_snap_name)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_overlap_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_overlap_exit,
+ TP_ARGS(
+ int, retval,
+ uint64_t, overlap),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, overlap, overlap)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_stripe_unit_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_stripe_unit_exit,
+ TP_ARGS(
+ int, retval,
+ uint64_t, stripe_unit),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, stripe_unit, stripe_unit)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_stripe_count_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_stripe_count_exit,
+ TP_ARGS(
+ int, retval,
+ uint64_t, stripe_count),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, stripe_count, stripe_count)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_features_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_features_exit,
+ TP_ARGS(
+ int, retval,
+ uint64_t, features),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, features, features)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_size_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_size_exit,
+ TP_ARGS(
+ int, retval,
+ uint64_t, size),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, size, size)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_old_format_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, get_old_format_exit,
+ TP_ARGS(
+ int, retval,
+ uint64_t, old_format),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, old_format, old_format)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, stat_enter,
+ TP_ARGS(
+ void*, imagectx,
+ const char*, name,
+ const char*, snap_name,
+ char, read_only),
+ TP_FIELDS(
+ ctf_integer_hex(void*, imagectx, imagectx)
+ ctf_string(name, name)
+ ctf_string(snap_name, snap_name)
+ ctf_integer(char, read_only, read_only)
+ )
+)
+
+TRACEPOINT_EVENT(librbd, stat_exit,
+ TP_ARGS(
+ int, retval,
+ rbd_image_info_t*, info),
+ TP_FIELDS(
+ ctf_integer(int, retval, retval)
+ ctf_integer(uint64_t, size, info->size)
+ ctf_integer(uint64_t, obj_size, info->obj_size)
+ ctf_integer(uint64_t, num_objs, info->num_objs)
+ ctf_integer(int, order, info->order)
+ ctf_array_text(char, block_name_prefix, info->block_name_prefix, RBD_MAX_BLOCK_NAME_SIZE)
+ ctf_integer(int64_t, parent_pool, info->parent_pool)
+ ctf_array_text(char, parent_name, info->parent_name, RBD_MAX_IMAGE_NAME_SIZE)
+ )
+)