From: Joe Thornber <thornber@sistina.com>

I made a couple of mistakes when I wrote the original ioctl interface,
the main problem being with not paying enough attention to the
alignment of the data within structs.  I think this will bite us when
hammer comes along.

The fix is simple and also include changing the dev_t's passed in to
be u64s for future proofing.  We're calling this interface version 3,
with version 2 being a similar patch produced by Kevin Corry a while
ago.

When people move to v3 kernels they will need to rebuild the
libdevmapper package.  The cvs version of which now supports *both* v1
and v3.  A new release of libdevmapper is imminent.

If you want more specifics you'll have to talk to Alasdair Kergon
(agk@uk.sistina.com) who is dealing with this while I concentrate on
the mirror target.

The only other thing that will need changing in dm to cope with 64bit
dev_t concerns the bitset I'm using to keep track of allocated minor
numbers.  A trivial patch like this would work for now:



 25-akpm/drivers/md/dm.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/md/dm.c~dm-larger-dev_t-fix drivers/md/dm.c
--- 25/drivers/md/dm.c~dm-larger-dev_t-fix	Mon Apr 14 16:21:24 2003
+++ 25-akpm/drivers/md/dm.c	Mon Apr 14 16:21:24 2003
@@ -15,7 +15,7 @@
 #include <linux/slab.h>
 
 static const char *_name = DM_NAME;
-#define MAX_DEVICES (1 << KDEV_MINOR_BITS)
+#define MAX_DEVICES 1024
 
 static int major = 0;
 static int _major = 0;

_