printf("read completion cb called!\n");
}
- void aio_write_test_data(rbd_image_t image, const char *test_data,
- uint64_t off, size_t len, uint32_t iohint=0)
-void aio_write_test_data(rbd_image_t image, const char *test_data, uint64_t off, size_t len, bool *passed)
++void aio_write_test_data(rbd_image_t image, const char *test_data, uint64_t off, size_t len, uint32_t iohint, bool *passed)
{
rbd_completion_t comp;
rbd_aio_create_completion(NULL, (rbd_callback_t) simple_write_cb, &comp);
ASSERT_EQ(0, r);
printf("finished write\n");
rbd_aio_release(comp);
+ *passed = true;
}
- void write_test_data(rbd_image_t image, const char *test_data,
- uint64_t off, size_t len, uint32_t iohint=0)
-void write_test_data(rbd_image_t image, const char *test_data, uint64_t off, size_t len, bool *passed)
++void write_test_data(rbd_image_t image, const char *test_data, uint64_t off, size_t len, uint32_t iohint, bool *passed)
{
ssize_t written;
- written = rbd_write(image, off, len, test_data);
+ if (iohint)
+ written = rbd_write2(image, off, len, test_data, iohint);
+ else
+ written = rbd_write(image, off, len, test_data);
printf("wrote: %d\n", (int) written);
ASSERT_EQ(len, static_cast<size_t>(written));
+ *passed = true;
}
- void aio_discard_test_data(rbd_image_t image, uint64_t off, uint64_t len)
+ void aio_discard_test_data(rbd_image_t image, uint64_t off, uint64_t len, bool *passed)
{
rbd_completion_t comp;
rbd_aio_create_completion(NULL, (rbd_callback_t) simple_write_cb, &comp);
written = rbd_discard(image, off, len);
printf("discard: %d~%d = %d\n", (int)off, (int)len, (int)written);
ASSERT_EQ(len, static_cast<size_t>(written));
+ *passed = true;
}
- void aio_read_test_data(rbd_image_t image, const char *expected,
- uint64_t off, size_t len, uint32_t iohint=0)
-void aio_read_test_data(rbd_image_t image, const char *expected, uint64_t off, size_t len, bool *passed)
++void aio_read_test_data(rbd_image_t image, const char *expected, uint64_t off, size_t len, uint32_t iohint, bool *passed)
{
rbd_completion_t comp;
char *result = (char *)malloc(len + 1);
ASSERT_EQ(0, memcmp(result, expected, len));
}
free(result);
+ *passed = true;
}
- void read_test_data(rbd_image_t image, const char *expected,
- uint64_t off, size_t len, uint32_t iohint=0)
-void read_test_data(rbd_image_t image, const char *expected, uint64_t off, size_t len, bool *passed)
++void read_test_data(rbd_image_t image, const char *expected, uint64_t off, size_t len, uint32_t iohint, bool *passed)
{
ssize_t read;
char *result = (char *)malloc(len + 1);
memset(zero_data, 0, sizeof(zero_data));
for (i = 0; i < 5; ++i)
- write_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
- ASSERT_PASSED(write_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
++ ASSERT_PASSED(write_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE, 0);
for (i = 5; i < 10; ++i)
- aio_write_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
- ASSERT_PASSED(aio_write_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
++ ASSERT_PASSED(aio_write_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE, 0);
for (i = 0; i < 5; ++i)
- read_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE, 0);
for (i = 5; i < 10; ++i)
- aio_read_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
- ASSERT_PASSED(aio_read_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE);
++ ASSERT_PASSED(aio_read_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE, 0);
// discard 2nd, 4th sections.
- discard_test_data(image, TEST_IO_SIZE, TEST_IO_SIZE);
- aio_discard_test_data(image, TEST_IO_SIZE*3, TEST_IO_SIZE);
-
- read_test_data(image, test_data, 0, TEST_IO_SIZE);
- read_test_data(image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE);
- read_test_data(image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE);
- read_test_data(image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE);
- read_test_data(image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE);
+ ASSERT_PASSED(discard_test_data, image, TEST_IO_SIZE, TEST_IO_SIZE);
+ ASSERT_PASSED(aio_discard_test_data, image, TEST_IO_SIZE*3, TEST_IO_SIZE);
+
- ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE, 0);
rbd_image_info_t info;
rbd_completion_t comp;
rados_ioctx_destroy(ioctx);
}
- write_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+TEST_F(TestLibRBD, TestIOWithIOHint)
+{
+ rados_ioctx_t ioctx;
+ rados_ioctx_create(_cluster, m_pool_name.c_str(), &ioctx);
+
+ rbd_image_t image;
+ int order = 0;
+ std::string name = get_temp_image_name();
+ uint64_t size = 2 << 20;
+
+ ASSERT_EQ(0, create_image(ioctx, name.c_str(), size, &order));
+ ASSERT_EQ(0, rbd_open(ioctx, name.c_str(), &image, NULL));
+
+ char test_data[TEST_IO_SIZE + 1];
+ char zero_data[TEST_IO_SIZE + 1];
+ int i;
+
+ for (i = 0; i < TEST_IO_SIZE; ++i) {
+ test_data[i] = (char) (rand() % (126 - 33) + 33);
+ }
+ test_data[TEST_IO_SIZE] = '\0';
+ memset(zero_data, 0, sizeof(zero_data));
+
+ for (i = 0; i < 5; ++i)
- aio_write_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
++ ASSERT_PASSED(write_test_data, image, test_data, TEST_IO_SIZE * i,
++ TEST_IO_SIZE, LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+
+ for (i = 5; i < 10; ++i)
- read_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
++ ASSERT_PASSED(aio_write_test_data, image, test_data, TEST_IO_SIZE * i,
++ TEST_IO_SIZE, LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+
+ for (i = 0; i < 5; ++i)
- aio_read_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL|LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE,
++ LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
+
+ for (i = 5; i < 10; ++i)
- discard_test_data(image, TEST_IO_SIZE, TEST_IO_SIZE);
- aio_discard_test_data(image, TEST_IO_SIZE*3, TEST_IO_SIZE);
-
- read_test_data(image, test_data, 0, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
- read_test_data(image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
- read_test_data(image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
- read_test_data(image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
- read_test_data(image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE);
++ ASSERT_PASSED(aio_read_test_data, image, test_data, TEST_IO_SIZE * i,
++ TEST_IO_SIZE, LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL|LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+
+ // discard 2nd, 4th sections.
++ ASSERT_PASSED(discard_test_data, image, TEST_IO_SIZE, TEST_IO_SIZE);
++ ASSERT_PASSED(aio_discard_test_data, image, TEST_IO_SIZE*3, TEST_IO_SIZE);
++
++ ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_SIZE,
++ LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
++ ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE,
++ LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE,
++ LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
++ ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE,
++ LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE, 0);
+
+ rbd_image_info_t info;
+ rbd_completion_t comp;
+ ASSERT_EQ(0, rbd_stat(image, &info, sizeof(info)));
+ // can't read or write starting past end
+ ASSERT_EQ(-EINVAL, rbd_write(image, info.size, 1, test_data));
+ ASSERT_EQ(-EINVAL, rbd_read(image, info.size, 1, test_data));
+ // reading through end returns amount up to end
+ ASSERT_EQ(10, rbd_read2(image, info.size - 10, 100, test_data,
+ LIBRADOS_OP_FLAG_FADVISE_DONTNEED));
+ // writing through end returns amount up to end
+ ASSERT_EQ(10, rbd_write2(image, info.size - 10, 100, test_data,
+ LIBRADOS_OP_FLAG_FADVISE_DONTNEED));
+
+ rbd_aio_create_completion(NULL, (rbd_callback_t) simple_read_cb, &comp);
+ ASSERT_EQ(-EINVAL, rbd_aio_write(image, info.size, 1, test_data, comp));
+ ASSERT_EQ(-EINVAL, rbd_aio_read2(image, info.size, 1, test_data, comp,
+ LIBRADOS_OP_FLAG_FADVISE_DONTNEED));
+
+ ASSERT_EQ(0, rbd_close(image));
+
+ rados_ioctx_destroy(ioctx);
+
+}
+
TEST_F(TestLibRBD, TestEmptyDiscard)
{
rados_ioctx_t ioctx;
cout << "read completion cb called!" << endl;
}
- void aio_write_test_data(librbd::Image& image, const char *test_data, off_t off, int iohint=0)
-void aio_write_test_data(librbd::Image& image, const char *test_data, off_t off, bool *passed)
++void aio_write_test_data(librbd::Image& image, const char *test_data,
++ off_t off, uint32_t iohint, bool *passed)
{
ceph::bufferlist bl;
bl.append(test_data, strlen(test_data));
int r = comp->get_return_value();
ASSERT_TRUE(r >= 0);
comp->release();
+ *passed = true;
}
- void write_test_data(librbd::Image& image, const char *test_data, off_t off, int iohint=0)
-void write_test_data(librbd::Image& image, const char *test_data, off_t off, bool *passed)
++void write_test_data(librbd::Image& image, const char *test_data, off_t off, uint32_t iohint, bool *passed)
{
size_t written;
size_t len = strlen(test_data);
ceph::bufferlist bl;
bl.append(test_data, len);
- written = image.write(off, len, bl);
+ if (iohint)
+ written = image.write2(off, len, bl, iohint);
+ else
+ written = image.write(off, len, bl);
printf("wrote: %u\n", (unsigned int) written);
ASSERT_EQ(bl.length(), written);
+ *passed = true;
}
- void discard_test_data(librbd::Image& image, off_t off, size_t len)
+ void discard_test_data(librbd::Image& image, off_t off, size_t len, bool *passed)
{
size_t written;
written = image.discard(off, len);
printf("discard: %u~%u\n", (unsigned)off, (unsigned)len);
ASSERT_EQ(len, written);
+ *passed = true;
}
- void aio_read_test_data(librbd::Image& image, const char *expected, off_t off, size_t expected_len, int iohint=0)
-void aio_read_test_data(librbd::Image& image, const char *expected, off_t off, size_t expected_len, bool *passed)
++void aio_read_test_data(librbd::Image& image, const char *expected, off_t off, size_t expected_len, uint32_t iohint, bool *passed)
{
librbd::RBD::AioCompletion *comp = new librbd::RBD::AioCompletion(NULL, (librbd::callback_t) simple_read_cb_pp);
ceph::bufferlist bl;
ASSERT_EQ(0, memcmp(expected, bl.c_str(), TEST_IO_SIZE));
printf("finished read\n");
comp->release();
+ *passed = true;
}
- void read_test_data(librbd::Image& image, const char *expected, off_t off, size_t expected_len, int iohint=0)
-void read_test_data(librbd::Image& image, const char *expected, off_t off, size_t expected_len, bool *passed)
++void read_test_data(librbd::Image& image, const char *expected, off_t off, size_t expected_len, uint32_t iohint, bool *passed)
{
int read, total_read = 0;
size_t len = expected_len;
memset(zero_data, 0, sizeof(zero_data));
for (i = 0; i < 5; ++i)
- write_test_data(image, test_data, strlen(test_data) * i);
- ASSERT_PASSED(write_test_data, image, test_data, strlen(test_data) * i);
++ ASSERT_PASSED(write_test_data, image, test_data, strlen(test_data) * i, 0);
for (i = 5; i < 10; ++i)
- aio_write_test_data(image, test_data, strlen(test_data) * i);
- ASSERT_PASSED(aio_write_test_data, image, test_data, strlen(test_data) * i);
++ ASSERT_PASSED(aio_write_test_data, image, test_data, strlen(test_data) * i, 0);
for (i = 0; i < 5; ++i)
- read_test_data(image, test_data, strlen(test_data) * i, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, strlen(test_data) * i, TEST_IO_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, strlen(test_data) * i, TEST_IO_SIZE, 0);
for (i = 5; i < 10; ++i)
- aio_read_test_data(image, test_data, strlen(test_data) * i, TEST_IO_SIZE);
- ASSERT_PASSED(aio_read_test_data, image, test_data, strlen(test_data) * i, TEST_IO_SIZE);
++ ASSERT_PASSED(aio_read_test_data, image, test_data, strlen(test_data) * i, TEST_IO_SIZE, 0);
// discard 2nd, 4th sections.
- discard_test_data(image, TEST_IO_SIZE, TEST_IO_SIZE);
- aio_discard_test_data(image, TEST_IO_SIZE*3, TEST_IO_SIZE);
+ ASSERT_PASSED(discard_test_data, image, TEST_IO_SIZE, TEST_IO_SIZE);
+ ASSERT_PASSED(aio_discard_test_data, image, TEST_IO_SIZE*3, TEST_IO_SIZE);
- read_test_data(image, test_data, 0, TEST_IO_SIZE);
- read_test_data(image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE);
- read_test_data(image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE);
- read_test_data(image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE);
- read_test_data(image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE, 0);
++ ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE, 0);
}
ioctx.close();
}
- write_test_data(image, test_data, strlen(test_data) * i, LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+TEST_F(TestLibRBD, TestIOPPWithIOHint)
+{
+ librados::IoCtx ioctx;
+ ASSERT_EQ(0, _rados.ioctx_create(m_pool_name.c_str(), ioctx));
+
+ {
+ librbd::RBD rbd;
+ librbd::Image image;
+ int order = 0;
+ std::string name = get_temp_image_name();
+ uint64_t size = 2 << 20;
+
+ ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order));
+ ASSERT_EQ(0, rbd.open(ioctx, image, name.c_str(), NULL));
+
+ char test_data[TEST_IO_SIZE + 1];
+ int i;
+
+ for (i = 0; i < TEST_IO_SIZE; ++i) {
+ test_data[i] = (char) (rand() % (126 - 33) + 33);
+ }
+
+ for (i = 0; i < 5; ++i)
- aio_write_test_data(image, test_data, strlen(test_data) * i,
- LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
++ ASSERT_PASSED(write_test_data, image, test_data, strlen(test_data) * i,
++ LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+
+ for (i = 5; i < 10; ++i)
- read_test_data(image, test_data, strlen(test_data), TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_RANDOM);
++ ASSERT_PASSED(aio_write_test_data, image, test_data, strlen(test_data) * i,
++ LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+
- aio_read_test_data(image, test_data, strlen(test_data) * i, TEST_IO_SIZE,
- LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL|LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
++ ASSERT_PASSED(read_test_data, image, test_data, strlen(test_data),
++ TEST_IO_SIZE, LIBRADOS_OP_FLAG_FADVISE_RANDOM);
+
+ for (i = 5; i < 10; ++i)
++ ASSERT_PASSED(aio_read_test_data, image, test_data, strlen(test_data) * i,
++ TEST_IO_SIZE, LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL|LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+ }
+
+ ioctx.close();
+}
+
+
TEST_F(TestLibRBD, TestIOToSnapshot)
{
ASSERT_EQ(0, test_ls_snaps(image, 0));
ASSERT_EQ(0, rbd_snap_create(image, "orig"));
ASSERT_EQ(1, test_ls_snaps(image, 1, "orig", isize));
- read_test_data(image, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image, orig_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
printf("write test data!\n");
- write_test_data(image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(write_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(write_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
ASSERT_EQ(0, rbd_snap_create(image, "written"));
ASSERT_EQ(2, test_ls_snaps(image, 2, "orig", isize, "written", isize));
- read_test_data(image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
rbd_snap_set(image, "orig");
- read_test_data(image, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image, orig_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
rbd_snap_set(image, "written");
- read_test_data(image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
rbd_snap_set(image, "orig");
ASSERT_LT(r, 0);
cout << cpp_strerror(-r) << std::endl;
- read_test_data(image, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image, orig_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
rbd_snap_set(image, "written");
- read_test_data(image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
r = rbd_snap_rollback(image, "orig");
ASSERT_EQ(r, -EROFS);
r = rbd_snap_rollback(image, "orig");
ASSERT_EQ(r, 0);
- write_test_data(image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(write_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(write_test_data, image, test_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
rbd_flush(image);
printf("opening testimg@orig\n");
ASSERT_EQ(0, rbd_open(ioctx, name.c_str(), &image_at_snap, "orig"));
- read_test_data(image_at_snap, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
- ASSERT_PASSED(read_test_data, image_at_snap, orig_data, 0, TEST_IO_TO_SNAP_SIZE);
++ ASSERT_PASSED(read_test_data, image_at_snap, orig_data, 0, TEST_IO_TO_SNAP_SIZE, 0);
r = rbd_write(image_at_snap, 0, TEST_IO_TO_SNAP_SIZE, test_data);
printf("write to snapshot returned %d\n", r);
ASSERT_LT(r, 0);
printf("made and opened clone \"child\"\n");
// check read
- read_test_data(child, data, 0, strlen(data));
- ASSERT_PASSED(read_test_data, child, data, 0, strlen(data));
++ ASSERT_PASSED(read_test_data, child, data, 0, strlen(data), 0);
// check write
ASSERT_EQ((ssize_t)strlen(data), rbd_write(child, 20, strlen(data), data));
- read_test_data(child, data, 20, strlen(data));
- read_test_data(child, data, 0, strlen(data));
- ASSERT_PASSED(read_test_data, child, data, 20, strlen(data));
- ASSERT_PASSED(read_test_data, child, data, 0, strlen(data));
++ ASSERT_PASSED(read_test_data, child, data, 20, strlen(data), 0);
++ ASSERT_PASSED(read_test_data, child, data, 0, strlen(data), 0);
// check attributes
ASSERT_EQ(0, rbd_stat(parent, &pinfo, sizeof(pinfo)));