From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50794) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YETUW-0003dX-6J for qemu-devel@nongnu.org; Thu, 22 Jan 2015 20:56:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YETUV-0003ll-8K for qemu-devel@nongnu.org; Thu, 22 Jan 2015 20:56:56 -0500 From: Julio Faracco Date: Thu, 22 Jan 2015 23:53:41 -0200 Message-Id: <1421978021-3609-2-git-send-email-jcfaracco@gmail.com> In-Reply-To: <1421978021-3609-1-git-send-email-jcfaracco@gmail.com> References: <1421978021-3609-1-git-send-email-jcfaracco@gmail.com> Subject: [Qemu-devel] [PATCH 2/2] qcow2-snapshot: Fixing bug of creating snapshots with the same name. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-trivial@nongnu.org, kwolf@redhat.com, Julio Faracco This commit fixes the bug #1396497. You can create multiple snapshots with the same name using 'qemu-img'. When you want to delete someone passing the name, it will remove the first occurence of the snapshot with that name. This commit fixes it. Before: $ qemu-img snapshot -c foo debian.qcow2 $ qemu-img snapshot -c foo debian.qcow2 $ qemu-img snapshot -c foo debian.qcow2 $ qemu-img snapshot -l debian.qcow2 ID TAG VM SIZE DATE VM CLOCK 1 foo 220M 2015-01-21 16:22:41 00:02:50.862 2 foo 130M 2015-01-22 11:14:55 00:00:40.132 3 foo 65M 2015-01-22 11:16:32 00:01:13.414 Now: $ qemu-img snapshot -c foo debian.qcow2 $ qemu-img snapshot -c foo debian.qcow2 qemu-img: Could not create snapshot 'foo': -17 (File exists) $ qemu-img snapshot -l debian.qcow2 ID TAG VM SIZE DATE VM CLOCK 1 foo 220M 2015-01-21 16:22:41 00:02:50.862 Signed-off-by: Julio Faracco --- block/qcow2-snapshot.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c index c7d4cfe..873ac49 100644 --- a/block/qcow2-snapshot.c +++ b/block/qcow2-snapshot.c @@ -356,8 +356,9 @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) find_new_snapshot_id(bs, sn_info->id_str, sizeof(sn_info->id_str)); } - /* Check that the ID is unique */ - if (find_snapshot_by_id_or_name(bs, sn_info->id_str) >= 0) { + /* Check that the ID and Name is unique */ + if (find_snapshot_by_id_or_name(bs, sn_info->id_str) >= 0 || + find_snapshot_by_id_or_name(bs, sn_info->name) >= 0 ) { return -EEXIST; } -- 1.9.1