[dm-devel] [RFC][PATCH 2/3] dm-raid1: add cancel_presuspend function

Takahiro Yasui tyasui at redhat.com
Tue Jan 19 20:41:29 UTC 2010


When suspend is interrupted after presuspend procedure, mirror target
needs to reset and release following variables:
  - reset ms->suspend flag
  - release semaphore (rh->recovery_count)


Signed-off-by: Takahiro Yasui <tyasui at redhat.com>
---
 drivers/md/dm-raid1.c |    9 +++++++++
 1 file changed, 9 insertions(+)

Index: linux-2.6.33-rc1-dm/drivers/md/dm-raid1.c
===================================================================
--- linux-2.6.33-rc1-dm.orig/drivers/md/dm-raid1.c
+++ linux-2.6.33-rc1-dm/drivers/md/dm-raid1.c
@@ -1311,6 +1311,14 @@ static void mirror_postsuspend(struct dm
 		DMWARN("log postsuspend failed");
 }
 
+static void mirror_cancel_presuspend(struct dm_target *ti)
+{
+	struct mirror_set *ms = ti->private;
+
+	atomic_set(&ms->suspend, 0);
+	dm_rh_start_recovery(ms->rh);
+}
+
 static void mirror_resume(struct dm_target *ti)
 {
 	struct mirror_set *ms = ti->private;
@@ -1412,6 +1420,7 @@ static struct target_type mirror_target 
 	.end_io	 = mirror_end_io,
 	.presuspend = mirror_presuspend,
 	.postsuspend = mirror_postsuspend,
+	.cancel_presuspend = mirror_cancel_presuspend,
 	.resume	 = mirror_resume,
 	.status	 = mirror_status,
 	.iterate_devices = mirror_iterate_devices,

-- 
Takahiro Yasui
Hitachi Computer Products (America), Inc.




More information about the dm-devel mailing list