From: Sage Weil Date: Fri, 12 Dec 2014 21:09:45 +0000 (-0800) Subject: Merge remote-tracking branch 'gh/master' into wip-librados-fadvise X-Git-Tag: v0.91~55^2~3^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cf2113eb38c55ccb1f66a0b78e77a163a0aeac0b;p=ceph.git Merge remote-tracking branch 'gh/master' into wip-librados-fadvise Conflicts: src/test/librbd/test_librbd.cc --- cf2113eb38c55ccb1f66a0b78e77a163a0aeac0b diff --cc src/test/librbd/test_librbd.cc index 1ee881a25ca8,919de2af7448..ccbb1885fc60 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@@ -636,8 -650,7 +650,7 @@@ void simple_read_cb(rbd_completion_t cb 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); @@@ -653,21 -663,19 +666,22 @@@ 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(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); @@@ -685,10 -694,10 +700,10 @@@ void discard_test_data(rbd_image_t imag written = rbd_discard(image, off, len); printf("discard: %d~%d = %d\n", (int)off, (int)len, (int)written); ASSERT_EQ(len, static_cast(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); @@@ -711,10 -717,10 +726,10 @@@ 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); @@@ -758,26 -762,26 +774,26 @@@ TEST_F(TestLibRBD, TestIO 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; @@@ -799,83 -803,6 +815,83 @@@ rados_ioctx_destroy(ioctx); } +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) - 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) - aio_write_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE, - LIBRADOS_OP_FLAG_FADVISE_DONTNEED); ++ 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) - read_test_data(image, test_data, TEST_IO_SIZE * i, TEST_IO_SIZE, - LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL); ++ 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) - 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(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. - 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(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; @@@ -908,7 -835,7 +924,8 @@@ void simple_read_cb_pp(librbd::completi 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)); @@@ -935,31 -860,31 +953,34 @@@ void aio_discard_test_data(librbd::Imag 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; @@@ -976,9 -898,10 +997,10 @@@ 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; @@@ -1019,72 -940,31 +1042,73 @@@ TEST_F(TestLibRBD, TestIOPP 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(); } +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) - 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) - aio_write_test_data(image, test_data, strlen(test_data) * i, - LIBRADOS_OP_FLAG_FADVISE_DONTNEED); ++ ASSERT_PASSED(aio_write_test_data, image, test_data, strlen(test_data) * i, ++ LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + - read_test_data(image, test_data, strlen(test_data), TEST_IO_SIZE, - LIBRADOS_OP_FLAG_FADVISE_RANDOM); ++ 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) - 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(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) { @@@ -1115,20 -995,20 +1139,20 @@@ 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"); @@@ -1137,9 -1017,9 +1161,9 @@@ 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); @@@ -1149,13 -1029,13 +1173,13 @@@ 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); @@@ -1228,12 -1108,12 +1252,12 @@@ TEST_F(TestLibRBD, TestClone 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)));