[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] [PATCH] [RFC] switch DM tables to readonly automatically



Hi all,

this patch switches the device-mapper table to read-only
status automatically if one underlying device returns -EROFS.

Rationale:
Whenever a SCSI device is switched to read-only a table
reload from multipath-tools fails, without any indication
about the reason. And it's actually quite tricky to detect
the read-only status from userland. And quite pointless, too,
as the kernel already knows about it.

And we now can create tables for CD-ROMs, too, without
having to use the '-r' flag to dmsetup ...

Christophe, this might also fix your problem.

As usual, comments etc are welcome.

Cheers,

Hannes
--
Dr. Hannes Reinecke		      zSeries & Storage
hare suse de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index e75b143..f615e85 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -501,11 +501,19 @@ static int __table_get_device(struct dm_table *t, struct dm_target *ti,
 		dd->mode = mode;
 		dd->bdev = NULL;
 
-		if ((r = open_dev(dd, dev, t->md))) {
+		r = open_dev(dd, dev, t->md);
+		if (r == -EROFS) {
+			dd->mode &= ~FMODE_WRITE;
+			r = open_dev(dd, dev, t->md);
+		}
+		if (r) {
 			kfree(dd);
 			return r;
 		}
 
+		if (dd->mode != mode)
+			t->mode = dd->mode;
+
 		format_dev_t(dd->name, dev);
 
 		atomic_set(&dd->count, 0);

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]