+++ /dev/null
-
- $ get_block_name_prefix() {
- > rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix']"
- > }
-
- $ rbd create --size 200M img
- $ DEV=$(sudo rbd map img)
- $ xfs_io -c 'pwrite -b 4M 0 200M' $DEV >/dev/null
- $ sudo rbd unmap $DEV
- $ rbd snap create img@snap
- $ rbd snap protect img@snap
-
-cloneimg1:
-1 object in an object set, 4M
-25 full object sets
-25 objects in total
-
- $ rbd clone img@snap cloneimg1
- $ DEV=$(sudo rbd map cloneimg1)
- $ hexdump $DEV
- 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ blkdiscard -l 100M $DEV
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
- $ DEV=$(sudo rbd map cloneimg1)
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
-
-cloneimg2:
-7 objects in an object set, 28M
-3 full object sets
-min((100M % 28M) / 512K, 7) = 7 objects in the last object set
-28 objects in total
-
- $ rbd clone --stripe-unit 512K --stripe-count 7 img@snap cloneimg2
- $ DEV=$(sudo rbd map cloneimg2)
- $ hexdump $DEV
- 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ blkdiscard -l 100M $DEV
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
- $ DEV=$(sudo rbd map cloneimg2)
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
-
-cloneimg3:
-23 objects in an object set, 92M
-1 full object set
-min((100M % 92M) / 512K, 23) = 16 objects in the last object set
-39 objects in total
-
- $ rbd clone --stripe-unit 512K --stripe-count 23 img@snap cloneimg3
- $ DEV=$(sudo rbd map cloneimg3)
- $ hexdump $DEV
- 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ blkdiscard -l 100M $DEV
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
- $ DEV=$(sudo rbd map cloneimg3)
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
-
-cloneimg4:
-65 objects in an object set, 260M
-0 full object sets
-min((100M % 260M) / 512K, 65) = 65 objects in the last object set
-65 objects in total
-
- $ rbd clone --stripe-unit 512K --stripe-count 65 img@snap cloneimg4
- $ DEV=$(sudo rbd map cloneimg4)
- $ hexdump $DEV
- 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ blkdiscard -l 100M $DEV
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
- $ DEV=$(sudo rbd map cloneimg4)
- $ hexdump $DEV
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
- *
- 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
- *
- c800000
- $ sudo rbd unmap $DEV
-
- $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg1)
- 25
- $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg2)
- 28
- $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg3)
- 39
- $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg4)
- 65
-
- $ rbd rm --no-progress cloneimg4
- $ rbd rm --no-progress cloneimg3
- $ rbd rm --no-progress cloneimg2
- $ rbd rm --no-progress cloneimg1
- $ rbd snap unprotect img@snap
- $ rbd snap rm --no-progress img@snap
- $ rbd rm --no-progress img
--- /dev/null
+
+ $ get_block_name_prefix() {
+ > rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix']"
+ > }
+
+ $ rbd create --size 200M img
+ $ DEV=$(sudo rbd map img)
+ $ xfs_io -c 'pwrite -b 4M 0 200M' $DEV >/dev/null
+ $ sudo rbd unmap $DEV
+ $ rbd snap create img@snap
+ $ rbd snap protect img@snap
+
+cloneimg1:
+1 object in an object set, 4M
+25 full object sets
+25 objects in total
+
+ $ rbd clone img@snap cloneimg1
+ $ DEV=$(sudo rbd map cloneimg1)
+ $ hexdump $DEV
+ 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ fallocate -z -l 100M $DEV
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+ $ DEV=$(sudo rbd map cloneimg1)
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+
+cloneimg2:
+7 objects in an object set, 28M
+3 full object sets
+min((100M % 28M) / 512K, 7) = 7 objects in the last object set
+28 objects in total
+
+ $ rbd clone --stripe-unit 512K --stripe-count 7 img@snap cloneimg2
+ $ DEV=$(sudo rbd map cloneimg2)
+ $ hexdump $DEV
+ 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ fallocate -z -l 100M $DEV
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+ $ DEV=$(sudo rbd map cloneimg2)
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+
+cloneimg3:
+23 objects in an object set, 92M
+1 full object set
+min((100M % 92M) / 512K, 23) = 16 objects in the last object set
+39 objects in total
+
+ $ rbd clone --stripe-unit 512K --stripe-count 23 img@snap cloneimg3
+ $ DEV=$(sudo rbd map cloneimg3)
+ $ hexdump $DEV
+ 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ fallocate -z -l 100M $DEV
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+ $ DEV=$(sudo rbd map cloneimg3)
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+
+cloneimg4:
+65 objects in an object set, 260M
+0 full object sets
+min((100M % 260M) / 512K, 65) = 65 objects in the last object set
+65 objects in total
+
+ $ rbd clone --stripe-unit 512K --stripe-count 65 img@snap cloneimg4
+ $ DEV=$(sudo rbd map cloneimg4)
+ $ hexdump $DEV
+ 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ fallocate -z -l 100M $DEV
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+ $ DEV=$(sudo rbd map cloneimg4)
+ $ hexdump $DEV
+ 0000000 0000 0000 0000 0000 0000 0000 0000 0000
+ *
+ 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+ *
+ c800000
+ $ sudo rbd unmap $DEV
+
+ $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg1)
+ 25
+ $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg2)
+ 28
+ $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg3)
+ 39
+ $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg4)
+ 65
+
+ $ rbd rm --no-progress cloneimg4
+ $ rbd rm --no-progress cloneimg3
+ $ rbd rm --no-progress cloneimg2
+ $ rbd rm --no-progress cloneimg1
+ $ rbd snap unprotect img@snap
+ $ rbd snap rm --no-progress img@snap
+ $ rbd rm --no-progress img
+++ /dev/null
-tasks:
-- cram:
- clients:
- client.0:
- - qa/rbd/krbd_whole_object_discard.t
--- /dev/null
+tasks:
+- cram:
+ clients:
+ client.0:
+ - qa/rbd/krbd_whole_object_zeroout.t
int ret;
/*
- * BLKDISCARD goes straight to disk and doesn't do anything
+ * BLKZEROOUT goes straight to disk and doesn't do anything
* about dirty buffers. This means we need to flush so that
*
* write 0..3M
*
* returns "data 0000 data" rather than "data data data" in
* case 1..2M was cached.
+ *
+ * Note: These cache coherency issues are supposed to be fixed
+ * in recent kernels.
*/
ret = __krbd_flush(ctx, true);
if (ret < 0)
return ret;
/*
- * off and len must be 512-byte aligned, otherwise BLKDISCARD
+ * off and len must be 512-byte aligned, otherwise BLKZEROOUT
* will fail with -EINVAL. This means that -K (enable krbd
* mode) requires -h 512 or similar.
*/
- if (ioctl(ctx->krbd_fd, BLKDISCARD, &range) < 0) {
+ if (ioctl(ctx->krbd_fd, BLKZEROOUT, &range) < 0) {
ret = -errno;
- prt("BLKDISCARD(%llu, %llu) failed\n", off, len);
+ prt("BLKZEROOUT(%llu, %llu) failed\n", off, len);
return ret;
}