if (snap_id == CEPH_NOSNAP)
return -ENOENT;
+ uint8_t prot;
+ r = cls_client::get_protection_status(&ictx->md_ctx, ictx->header_oid,
+ snap_id, &prot);
+ if (r < 0)
+ return r;
+
+ if (prot == RBD_PROTECTION_STATUS_PROTECTED)
+ return -EBUSY;
+
r = cls_client::set_protection_status(&ictx->md_ctx,
ictx->header_oid,
snap_id,
features, &order));
ASSERT_EQ(0, rbd_snap_protect(parent, "parent_snap"));
+ // protecting again should fail
+ ASSERT_EQ(-EBUSY, rbd_snap_protect(parent, "parent_snap"));
+ printf("can't protect a protected snap\n");
// This clone and open should work
ASSERT_EQ(0, rbd_clone(ioctx, "parent", "parent_snap", ioctx, "child",