From 53e98f11d1f3df30cc013af021464a257949a62d Mon Sep 17 00:00:00 2001 From: Anand Avati Date: Tue, 5 Mar 2013 14:48:28 -0800 Subject: features/qemu-block: support for QCOW2 and QED formats This patch adds support for internals snapshots using QCOW2 and general framework for external snapshots (next patch) with QCOW2 and QED. For internal snapshots, the file must be "initialized" or "formatted" into QCOW2 format, and specify a file size. Snapshots can be created, deleted, and applied ("goto"). e.g: // Format and Initialize sh# setfattr -n trusted.glusterfs.block-format -v qcow2:10GB /mnt/imgfile sh# ls -l /mnt/imgfile -rw-r--r-- 1 root root 10G Jul 18 21:20 imgfile // Create a snapshot sh# setfattr -n trusted.glusterfs.block-snapshot-create -v name1 imgfile // Apply a snapshot sh# setfattr -n trusted.gluterfs.block-snapshot-goto -v name1 imgfile Change-Id: If993e057a9455967ba3fa9dcabb7f74b8b2cf4c3 BUG: 986775 Signed-off-by: Anand Avati Reviewed-on: http://review.gluster.org/5367 Tested-by: Gluster Build System Reviewed-by: Brian Foster --- .../features/qemu-block/src/coroutine-synctask.h | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 xlators/features/qemu-block/src/coroutine-synctask.h (limited to 'xlators/features/qemu-block/src/coroutine-synctask.h') diff --git a/xlators/features/qemu-block/src/coroutine-synctask.h b/xlators/features/qemu-block/src/coroutine-synctask.h new file mode 100644 index 00000000..0f0aa99c --- /dev/null +++ b/xlators/features/qemu-block/src/coroutine-synctask.h @@ -0,0 +1,51 @@ +/* + Copyright (c) 2013 Red Hat, Inc. + This file is part of GlusterFS. + + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ + +#ifndef __COROUTINE_SYNCTASK_H +#define __COROUTINE_SYNCTASK_H + +#include "syncop.h" +#include "block/coroutine_int.h" +#include "qemu-common.h" +#include "block/coroutine_int.h" + +/* + Three entities: + + synctask - glusterfs implementation of xlator friendly lightweight threads + Coroutine - qemu coroutine API for its block drivers + CoroutineSynctask - implementation of Coroutine using synctasks + + Coroutine is an "embedded" structure inside CoroutineSynctask, called "base". + + E.g: + + Coroutine *co; + CoroutineSynctask *cs; + struct synctask *synctask; + + cs == synctask->opaque; + co == &(cs->base); + cs = DO_UPCAST(CoroutineSynctask, base, co); + synctask == cs->synctask; + +*/ + +typedef struct { + Coroutine base; + struct synctask *synctask; + CoroutineAction action; + bool run; + bool die; +} CoroutineSynctask; + + + +#endif /* !__COROUTINE_SYNCTASK_H */ -- cgit