return -ENOENT;
}
- int ImageCtx::test_flags(uint64_t flags, bool *flags_set) const
+ int ImageCtx::test_flags(librados::snap_t in_snap_id,
+ uint64_t flags, bool *flags_set) const
{
RWLock::RLocker l(snap_lock);
- return test_flags(flags, snap_lock, flags_set);
+ return test_flags(in_snap_id, flags, snap_lock, flags_set);
}
- int ImageCtx::test_flags(uint64_t flags, const RWLock &in_snap_lock,
+ int ImageCtx::test_flags(librados::snap_t in_snap_id,
+ uint64_t flags, const RWLock &in_snap_lock,
bool *flags_set) const
{
ceph_assert(snap_lock.is_locked());
uint64_t snap_flags;
- int r = get_flags(snap_id, &snap_flags);
+ int r = get_flags(in_snap_id, &snap_flags);
if (r < 0) {
return r;
}
bool test_op_features(uint64_t op_features,
const RWLock &in_snap_lock) const;
int get_flags(librados::snap_t in_snap_id, uint64_t *flags) const;
- int test_flags(uint64_t test_flags, bool *flags_set) const;
- int test_flags(uint64_t test_flags, const RWLock &in_snap_lock,
+ int test_flags(librados::snap_t in_snap_id,
+ uint64_t test_flags, bool *flags_set) const;
+ int test_flags(librados::snap_t in_snap_id,
+ uint64_t test_flags, const RWLock &in_snap_lock,
bool *flags_set) const;
int update_flags(librados::snap_t in_snap_id, uint64_t flag, bool enabled);
}
bool flags_set;
- int r = m_image_ctx.test_flags(RBD_FLAG_OBJECT_MAP_INVALID,
+ int r = m_image_ctx.test_flags(m_image_ctx.snap_id,
+ RBD_FLAG_OBJECT_MAP_INVALID,
m_image_ctx.snap_lock, &flags_set);
if (r < 0 || flags_set) {
return true;
}
bool flags_set;
- int r = m_image_ctx.test_flags(RBD_FLAG_OBJECT_MAP_INVALID,
+ int r = m_image_ctx.test_flags(m_image_ctx.snap_id,
+ RBD_FLAG_OBJECT_MAP_INVALID,
m_image_ctx.snap_lock, &flags_set);
if (r < 0 || flags_set) {
return true;
bool Request::invalidate() {
bool flags_set;
- int r = m_image_ctx.test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set);
+ int r = m_image_ctx.test_flags(m_snap_id, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set);
if (r == 0 && flags_set) {
return true;
}
ldout(cct, 5) << "snap_name=" << m_snap_name << ", "
<< "snap_id=" << m_snap_id << dendl;
-
auto aio_comp = create_rados_callback<
SnapshotRemoveRequest<I>,
&SnapshotRemoveRequest<I>::handle_release_snap_id>(this);
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP,
+ RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
ASSERT_FALSE(flags_set);
C_SaferCond cond_ctx;
}
ASSERT_EQ(0, cond_ctx.wait());
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP,
+ RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
ASSERT_TRUE(flags_set);
}
ASSERT_NE(0U, flags & RBD_FLAG_OBJECT_MAP_INVALID);
}
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP,
+ RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
ASSERT_TRUE(flags_set);
expect_unlock_exclusive_lock(*ictx);
}
ASSERT_EQ(0U, flags & RBD_FLAG_OBJECT_MAP_INVALID);
}
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP,
+ RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
ASSERT_TRUE(flags_set);
expect_unlock_exclusive_lock(*ictx);
}
if (m_dst_ictx->test_features(RBD_FEATURE_LAYERING)) {
bool flags_set;
- EXPECT_EQ(0, m_dst_ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID,
- &flags_set));
+ RWLock::RLocker dst_locker(m_dst_ictx->snap_lock);
+ EXPECT_EQ(0, m_dst_ictx->test_flags(m_dst_ictx->snap_id,
+ RBD_FLAG_OBJECT_MAP_INVALID,
+ m_dst_ictx->snap_lock, &flags_set));
EXPECT_FALSE(flags_set);
}
if (dst_ictx->test_features(RBD_FEATURE_LAYERING)) {
bool flags_set;
- EXPECT_EQ(0, dst_ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID,
- &flags_set));
+ RWLock::RLocker dst_locker(dst_ictx->snap_lock);
+ EXPECT_EQ(0, dst_ictx->test_flags(dst_ictx->snap_id,
+ RBD_FLAG_OBJECT_MAP_INVALID,
+ dst_ictx->snap_lock, &flags_set));
EXPECT_FALSE(flags_set);
}
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_FALSE(flags_set);
C_SaferCond lock_ctx;
ASSERT_EQ(0, ictx->md_ctx.write_full(oid, bl));
ASSERT_EQ(0, when_open_object_map(ictx));
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_TRUE(flags_set);
}
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_FALSE(flags_set);
C_SaferCond lock_ctx;
ASSERT_EQ(0, ictx->md_ctx.operate(oid, &op));
ASSERT_EQ(0, when_open_object_map(ictx));
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_TRUE(flags_set);
}
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_FALSE(flags_set);
C_SaferCond lock_ctx;
ASSERT_EQ(0, ictx->md_ctx.write_full(oid, bl));
ASSERT_EQ(0, when_open_object_map(ictx));
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_TRUE(flags_set);
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_TRUE(flags_set);
}
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
bool flags_set;
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_FALSE(flags_set);
librados::ObjectWriteOperation op;
}
ASSERT_EQ(0, lock_ctx.wait());
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID, &flags_set));
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
+ &flags_set));
ASSERT_TRUE(flags_set);
// Test the flag is stored on disk
ASSERT_EQ(0, ictx->state->refresh());
- ASSERT_EQ(0, ictx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID,
+ ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID,
&flags_set));
ASSERT_TRUE(flags_set);
}
local_size = m_local_image_ctx->get_image_size(
m_local_image_ctx->snap_id);
bool flags_set;
- ASSERT_EQ(0, m_local_image_ctx->test_flags(RBD_FLAG_OBJECT_MAP_INVALID,
+ ASSERT_EQ(0, m_local_image_ctx->test_flags(m_local_image_ctx->snap_id,
+ RBD_FLAG_OBJECT_MAP_INVALID,
m_local_image_ctx->snap_lock,
&flags_set));
ASSERT_FALSE(flags_set);