Skip to contentSkip to conversation

make device mapper compile on 2.5.4x

PATCH In review Bernd Eckenfels 3 participants 3 messages Nov 11, 2002 – Nov 12, 2002

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 make device mapper compile on 2.5.4x

Hello,

device mapper does not compile on my 2.4.x tree, because of an argument incompatibility in set_device_ro(). Please find attached a patch, which makes this file compile. I am not sure if it is correct, since I do not unterstand whats going on here, and have not tested it yet. Please somebody have a look at it since it it broken for multiple releases, yet.

BTW: I also suggest to remove the www.sistina.com/lvm/ url from the MAINTAINER file since it does not contain any useful information anymore.

Greetings
Bernd

md/dm-ioctl.c renamed from md/dm-ioctl.c~ +14 -2
@@ -560,6 +560,7 @@
 	struct dm_table *t;
 	struct mapped_device *md;
 	int minor;
+	struct block_device *bdev;
 
 	r = check_name(param->name);
 	if (r)
@@ -585,7 +586,12 @@
 	}
 	dm_table_put(t);	/* md will have grabbed its own reference */
 
-	set_device_ro(dm_kdev(md), 0/*(param->flags & DM_READONLY_FLAG)*/);
+	bdev = bdget(kdev_t_to_nr(dm_kdev(md)));
+	if (!bdev)
+		return -ENXIO;
+	set_device_ro(bdev, (param->flags & DM_READONLY_FLAG));
+	bdput(bdev);
+
 	r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
 	dm_put(md);
 
@@ -847,6 +853,7 @@
 	int r;
 	struct mapped_device *md;
 	struct dm_table *t;
+	struct block_device *bdev;
 
 	r = dm_table_create(&t, get_mode(param));
 	if (r)
@@ -871,7 +878,12 @@
 		return r;
 	}
 
-	set_device_ro(dm_kdev(md), (param->flags & DM_READONLY_FLAG));
+	bdev = bdget(kdev_t_to_nr(dm_kdev(md)));
+	if (!bdev)
+		return -ENXIO;
+	set_device_ro(bdev, (param->flags & DM_READONLY_FLAG));
+	bdput(bdev);
+
 	dm_put(md);
 
 	r = info(param, user);
Signature · 4 lines
  (OO)      -- [email protected] --
 ( .. )  ecki@{inka.de,linux.de,debian.org} http://home.pages.de/~eckes/
  o--o     *plush*  2048/93600EFD  eckes@irc  +497257930613  BE5-RIPE
(O____O)  When cryptography is outlawed, bayl bhgynjf jvyy unir cevinpl!
#1 lore raw

md/dm-ioctl.c line 593

Quoted 6 lines · Bernd Eckenfels
md/dm-ioctl.c renamed from md/dm-ioctl.c~ +5 -1
-	set_device_ro(dm_kdev(md), 0/*(param->flags & DM_READONLY_FLAG)*/);
+	bdev = bdget(kdev_t_to_nr(dm_kdev(md)));
+	if (!bdev)
+		return -ENXIO;
+	set_device_ro(bdev, (param->flags & DM_READONLY_FLAG));
+	bdput(bdev);

That is simply wrong. set_device_ro() works only on opened block_device. Correct fix is to use set_disk_ro() and it's already in the tree (1.830 on bkbits).

#2 lore raw
Quoted 4 lines · Alexander Viro

On Mon, 11 Nov 2002, Bernd Eckenfels wrote:

Quoted 10 lines

md/dm-ioctl.c line 593

Quoted 6 lines
md/dm-ioctl.c renamed from md/dm-ioctl.c~ +5 -1
-	set_device_ro(dm_kdev(md), 0/*(param->flags & DM_READONLY_FLAG)*/);
+	bdev = bdget(kdev_t_to_nr(dm_kdev(md)));
+	if (!bdev)
+		return -ENXIO;
+	set_device_ro(bdev, (param->flags & DM_READONLY_FLAG));
+	bdput(bdev);

That is simply wrong. set_device_ro() works only on opened block_device. Correct fix is to use set_disk_ro() and it's already in the tree (1.830 on bkbits).

And I have sent the patch for this 3 times now.

- Joe