[dm-devel] [PATCH] dm-mp: revalidate paths with zero size prior to use

Mike Anderson andmike at us.ibm.com
Mon Jan 8 22:59:38 UTC 2007


From: Mike Anderson <andmike at us.ibm.com>

Revalidate zero size path prior to using.

Signed-off-by: Mike Anderson <andmike at us.ibm.com>
---

This patch currently only does a revalidate if the size is zero to reduce
impact to existing configurations.

Visual change to the user is the dmesg will contain revalidate info for
each device.

 drivers/md/dm-mpath.c |   24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

Index: linux-2.6-patched/drivers/md/dm-mpath.c
===================================================================
--- linux-2.6-patched.orig/drivers/md/dm-mpath.c	2007-01-08 14:35:14.000000000 -0800
+++ linux-2.6-patched/drivers/md/dm-mpath.c	2007-01-08 14:35:37.000000000 -0800
@@ -107,6 +107,27 @@
 static void process_queued_ios(struct work_struct *work);
 static void trigger_event(struct work_struct *work);
 
+static void dm_check_dev_size(struct priority_group *pg)
+{
+	struct pgpath *pgpath;
+	struct block_device *bdev;
+	sector_t dev_size;
+
+	if (!pg)
+		return;
+
+	list_for_each_entry(pgpath, &pg->pgpaths, list) {
+		bdev = pgpath->path.dev->bdev;
+		dev_size = bdev->bd_inode->i_size >> SECTOR_SHIFT;
+
+		if (!dev_size) {
+			struct gendisk *gd = bdev->bd_disk;
+			if (gd->fops->revalidate_disk)
+				gd->fops->revalidate_disk(gd);
+			bd_set_size(bdev, (loff_t)get_capacity(gd)<<9);
+		}
+	}
+}
 
 /*-----------------------------------------------
  * Allocation routines
@@ -224,6 +245,7 @@
 	} else {
 		m->pg_init_required = 0;
 		m->queue_io = 0;
+		dm_check_dev_size(m->current_pg);
 	}
 }
 
@@ -1002,6 +1024,8 @@
 	} else if (!m->pg_init_required)
 		m->queue_io = 0;
 
+	dm_check_dev_size(m->current_pg);
+
 	m->pg_init_in_progress = 0;
 	queue_work(kmultipathd, &m->process_queued_ios);
 	spin_unlock_irqrestore(&m->lock, flags);




More information about the dm-devel mailing list