From patchwork Tue Oct 20 22:46:53 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Snitzer X-Patchwork-Id: 55024 Received: from hormel.redhat.com (hormel1.redhat.com [209.132.177.33]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n9KMlFYl021620 for ; Tue, 20 Oct 2009 22:47:16 GMT Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) by hormel.redhat.com (Postfix) with ESMTP id 622C7619B65; Tue, 20 Oct 2009 18:47:15 -0400 (EDT) Received: from int-mx02.intmail.prod.int.phx2.redhat.com (nat-pool.util.phx.redhat.com [10.8.5.200]) by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id n9KMl9Z3017669 for ; Tue, 20 Oct 2009 18:47:09 -0400 Received: from localhost (dhcp-100-19-150.bos.redhat.com [10.16.19.150]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9KMl9eI020617; Tue, 20 Oct 2009 18:47:09 -0400 From: Mike Snitzer To: dm-devel@redhat.com Date: Tue, 20 Oct 2009 18:46:53 -0400 Message-Id: <1256078825-11331-6-git-send-email-snitzer@redhat.com> In-Reply-To: <1256078825-11331-1-git-send-email-snitzer@redhat.com> References: <1256078825-11331-1-git-send-email-snitzer@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-loop: dm-devel@redhat.com Cc: Mikulas Patocka Subject: [dm-devel] [PATCH v2 05/17] dm exception store: do not read metadata if going to handover exceptions X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.5 Precedence: junk Reply-To: device-mapper development List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com diff --git a/drivers/md/dm-exception-store.h b/drivers/md/dm-exception-store.h index bb88746..a96a40a 100644 --- a/drivers/md/dm-exception-store.h +++ b/drivers/md/dm-exception-store.h @@ -54,11 +54,15 @@ struct dm_exception_store_type { * The target shouldn't read the COW device until this is * called. As exceptions are read from the COW, they are * reported back via the callback. + * + * will_handover means that there is another snapshot active; + * chunk size must be setup but no exceptions need to be read + * because they will be handed over from the active snapshot. */ int (*read_metadata) (struct dm_exception_store *store, int (*callback)(void *callback_context, chunk_t old, chunk_t new), - void *callback_context); + void *callback_context, int will_handover); /* * Find somewhere to store the next exception. diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c index 157999e..e0f526a 100644 --- a/drivers/md/dm-snap-persistent.c +++ b/drivers/md/dm-snap-persistent.c @@ -529,7 +529,7 @@ static void persistent_dtr(struct dm_exception_store *store) static int persistent_read_metadata(struct dm_exception_store *store, int (*callback)(void *callback_context, chunk_t old, chunk_t new), - void *callback_context) + void *callback_context, int will_handover) { int r, uninitialized_var(new_snapshot); struct pstore *ps = get_info(store); @@ -586,7 +586,8 @@ static int persistent_read_metadata(struct dm_exception_store *store, /* * Read the metadata. */ - r = read_exceptions(ps, callback, callback_context); + if (!will_handover) + r = read_exceptions(ps, callback, callback_context); return r; } diff --git a/drivers/md/dm-snap-transient.c b/drivers/md/dm-snap-transient.c index a0898a6..341231a 100644 --- a/drivers/md/dm-snap-transient.c +++ b/drivers/md/dm-snap-transient.c @@ -30,7 +30,7 @@ static void transient_dtr(struct dm_exception_store *store) static int transient_read_metadata(struct dm_exception_store *store, int (*callback)(void *callback_context, chunk_t old, chunk_t new), - void *callback_context) + void *callback_context, int will_handover) { return 0; } diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 5414e66..1f0a57c 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c @@ -739,7 +739,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) /* Metadata must only be loaded into one table at once */ r = s->store->type->read_metadata(s->store, dm_add_exception, - (void *)s); + (void *)s, s->handover); if (r < 0) { ti->error = "Failed to read snapshot metadata"; goto bad_load_and_register;