Spdk/lib/bdev
Maciej Szwed 3c22b8e41b blobstore: Make possible to remove snapshot if there is only one clone
Starting with this patch it is possible to remove a
snapshot if there is only a one clone created from it.

In such case snapshot can be removed without any data
copying. This is achieved with following steps (case
with only one clone):
1. Open snapshot (Snapshot1) that shall be removed
2. Check if the Snapshot1 has no more than 1 clone (Clone1)
3. Remove Clone1 entry from Snapshot1
4. If the Snapshot1 has a parent snapshot (Snapshot2):
 4a. Add Clone1 entry to the Snapshot2 clones list
 4b. Remove Snapshot1 entry from Snapshot2 clones list
5. Open Clone1 blob
6. Freeze I/O operations on Clone1
7. Temporarily override md_ro flag for Snapshot1 and Clone1
   for MD modification
8. Merge Snapshot1 and Clone1 clusters maps into Clone1
   clusters map
9a. If Snapshot2 is present switch parent ID and backing
    bs_dev on Clone1
9b. If Snapshot2 is not present set parent ID to
    SPDK_BLOBID_INVALID and backing bs_dev to zeroes_dev
10. Sync MD on Clone1
11. Sync MD on Snapshot1
12. Restore MD flags for Clone1 and Snapshot1
13. Unfreeze I/O on Clone1
14. Close Clone1 blob
15. Remove Snapshot1

Signed-off-by: Maciej Szwed <maciej.szwed@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/445576 (master)

(cherry picked from commit 622127d7e1)
Change-Id: I800724b981af894e01e1912d0077c5b34a2ae634
Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/458464
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
2019-06-19 10:24:59 +00:00
..
aio bdev/aio: cleanup bdev_aio.h 2019-03-01 13:03:55 +00:00
compress bdev/compress: fix issues with delete 2019-06-18 03:17:06 +00:00
crypto bdev/crypto: add new uninit call needed for dpdk 19.02 2019-04-24 22:00:10 +00:00
error bdev: make spdk_bdev_register_module_xxx function names predictable 2019-02-11 23:56:53 +00:00
gpt bdev: switch to spdk_*malloc(). 2019-04-09 06:30:42 +00:00
iscsi bdev/iscsi: fix iscsi bdev wrong lun id 2019-04-01 01:16:51 +00:00
lvol blobstore: Make possible to remove snapshot if there is only one clone 2019-06-19 10:24:59 +00:00
malloc bdev: Make malloc bdev use the new zero copy mechanism 2019-04-23 18:38:39 +00:00
null bdev/null : Clean up module resources that failed to initialize. 2019-04-24 22:25:47 +00:00
nvme bdev/nvme: fix issue about coredump which caused by assert error. 2019-04-22 15:23:11 +00:00
ocf ocf: Improve handling of partial IOs 2019-06-18 19:01:37 +00:00
passthru bdev/passthru: call spdk_bdev_module_release_bdev in the error path of registration 2019-06-18 03:17:06 +00:00
pmem bdev: process failure of spdk_bdev_io_get_buf_cb in each bdev module 2019-02-27 07:28:15 +00:00
raid bdev/raid: Make destroy_raid_bdev RPC wait for completion by callback 2019-06-16 08:46:05 +00:00
rbd bdev: process failure of spdk_bdev_io_get_buf_cb in each bdev module 2019-02-27 07:28:15 +00:00
rpc bdev: remove delete_bdev RPC 2019-03-01 08:50:07 +00:00
split bdev: make spdk_bdev_register_module_xxx function names predictable 2019-02-11 23:56:53 +00:00
uring bdev: Add io_uring bdev module 2019-03-22 18:51:48 +00:00
virtio virtio: switch to spdk_*malloc(). 2019-03-28 07:39:31 +00:00
bdev.c bdev: don't call spdk_bdev_free_io() for the error case 2019-06-18 19:00:37 +00:00
Makefile bdev/compress: add compression vbdev module 2019-03-27 14:51:22 +00:00
part.c bdev: deprecate spdk_vbdev_register 2019-04-04 08:28:31 +00:00
scsi_nvme.c bdev: move error union to internal spdk_bdev_io struct 2018-06-26 20:04:07 +00:00
vtune.c mk: don't use '-include spdk/config.h' 2018-10-02 23:13:32 +00:00