1*d003e0aeSVladimir Sementsov-Ogievskiy /* 2*d003e0aeSVladimir Sementsov-Ogievskiy * copy-before-write filter driver 3*d003e0aeSVladimir Sementsov-Ogievskiy * 4*d003e0aeSVladimir Sementsov-Ogievskiy * The driver performs Copy-Before-Write (CBW) operation: it is injected above 5*d003e0aeSVladimir Sementsov-Ogievskiy * some node, and before each write it copies _old_ data to the target node. 6*d003e0aeSVladimir Sementsov-Ogievskiy * 7*d003e0aeSVladimir Sementsov-Ogievskiy * Copyright (c) 2018-2021 Virtuozzo International GmbH. 8*d003e0aeSVladimir Sementsov-Ogievskiy * 9*d003e0aeSVladimir Sementsov-Ogievskiy * Author: 10*d003e0aeSVladimir Sementsov-Ogievskiy * Sementsov-Ogievskiy Vladimir <vsementsov@virtuozzo.com> 11*d003e0aeSVladimir Sementsov-Ogievskiy * 12*d003e0aeSVladimir Sementsov-Ogievskiy * This program is free software; you can redistribute it and/or modify 13*d003e0aeSVladimir Sementsov-Ogievskiy * it under the terms of the GNU General Public License as published by 14*d003e0aeSVladimir Sementsov-Ogievskiy * the Free Software Foundation; either version 2 of the License, or 15*d003e0aeSVladimir Sementsov-Ogievskiy * (at your option) any later version. 16*d003e0aeSVladimir Sementsov-Ogievskiy * 17*d003e0aeSVladimir Sementsov-Ogievskiy * This program is distributed in the hope that it will be useful, 18*d003e0aeSVladimir Sementsov-Ogievskiy * but WITHOUT ANY WARRANTY; without even the implied warranty of 19*d003e0aeSVladimir Sementsov-Ogievskiy * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20*d003e0aeSVladimir Sementsov-Ogievskiy * GNU General Public License for more details. 21*d003e0aeSVladimir Sementsov-Ogievskiy * 22*d003e0aeSVladimir Sementsov-Ogievskiy * You should have received a copy of the GNU General Public License 23*d003e0aeSVladimir Sementsov-Ogievskiy * along with this program. If not, see <http://www.gnu.org/licenses/>. 24*d003e0aeSVladimir Sementsov-Ogievskiy */ 25*d003e0aeSVladimir Sementsov-Ogievskiy 26*d003e0aeSVladimir Sementsov-Ogievskiy #ifndef COPY_BEFORE_WRITE_H 27*d003e0aeSVladimir Sementsov-Ogievskiy #define COPY_BEFORE_WRITE_H 28*d003e0aeSVladimir Sementsov-Ogievskiy 29*d003e0aeSVladimir Sementsov-Ogievskiy #include "block/block_int.h" 30*d003e0aeSVladimir Sementsov-Ogievskiy #include "block/block-copy.h" 31*d003e0aeSVladimir Sementsov-Ogievskiy 32*d003e0aeSVladimir Sementsov-Ogievskiy BlockDriverState *bdrv_cbw_append(BlockDriverState *source, 33*d003e0aeSVladimir Sementsov-Ogievskiy BlockDriverState *target, 34*d003e0aeSVladimir Sementsov-Ogievskiy const char *filter_node_name, 35*d003e0aeSVladimir Sementsov-Ogievskiy uint64_t cluster_size, 36*d003e0aeSVladimir Sementsov-Ogievskiy BackupPerf *perf, 37*d003e0aeSVladimir Sementsov-Ogievskiy BdrvRequestFlags write_flags, 38*d003e0aeSVladimir Sementsov-Ogievskiy BlockCopyState **bcs, 39*d003e0aeSVladimir Sementsov-Ogievskiy Error **errp); 40*d003e0aeSVladimir Sementsov-Ogievskiy void bdrv_cbw_drop(BlockDriverState *bs); 41*d003e0aeSVladimir Sementsov-Ogievskiy 42*d003e0aeSVladimir Sementsov-Ogievskiy #endif /* COPY_BEFORE_WRITE_H */ 43