Hi!

I got reiser4 working with the 64 bit kdev_t patch.

You are not allowed to use kdev_val except for hashing purposes. Also
the kdev_t should not be used outside the kernel. That's what dev_t is
for.

I've attached a patch that fixes the usage in a bunch of places.

But I would also vote to use dev_t instead of int for reiser4 memory
structures that hold device numbers and reserve 64 bits for it in the
filesystem.

There is a place where the dev_t is used for debugging output, you
should also replace it to use the print_dev_t function (it returns a
string) because you don't know it's size for the printf format.

--
Christophe Saout <[EMAIL PROTECTED]>
Please avoid sending me Word or PowerPoint attachments.
See http://www.fsf.org/philosophy/no-word-attachments.html
diff -Nur linux.orig/fs/reiser4/inode.c linux/fs/reiser4/inode.c
--- linux.orig/fs/reiser4/inode.c	2003-08-27 19:28:43.458391272 +0200
+++ linux/fs/reiser4/inode.c	2003-08-27 19:28:23.441434312 +0200
@@ -170,11 +170,11 @@
 	case S_IFBLK:
 	case S_IFCHR:
 	case S_IFIFO:{
-			int rdev;	/* to keep gcc happy */
+			dev_t rdev;
 
 			/* ugly hack with rdev */
 			if (data == NULL) {
-				rdev = kdev_val(inode->i_rdev);
+				rdev = kdev_t_to_nr(inode->i_rdev);
 				inode->i_rdev = val_to_kdev(0);
 			} else
 				rdev = data->rdev;
diff -Nur linux.orig/fs/reiser4/plugin/item/static_stat.c linux/fs/reiser4/plugin/item/static_stat.c
--- linux.orig/fs/reiser4/plugin/item/static_stat.c	2003-08-27 19:28:49.947404792 +0200
+++ linux/fs/reiser4/plugin/item/static_stat.c	2003-08-27 19:28:37.134352672 +0200
@@ -425,7 +425,7 @@
 		inode->i_atime.tv_sec = d32tocpu(&sd->atime);
 		inode->i_mtime.tv_sec = d32tocpu(&sd->mtime);
 		inode->i_ctime.tv_sec = d32tocpu(&sd->ctime);
-		inode->i_rdev = val_to_kdev(d32tocpu(&sd->rdev));
+		inode->i_rdev = to_kdev_t(d32tocpu(&sd->rdev));
 		inode_set_bytes(inode, (loff_t) d64tocpu(&sd->bytes));
 		next_stat(len, area, sizeof *sd);
 		return 0;
@@ -470,7 +470,7 @@
 	cputod32((__u32) inode->i_atime.tv_sec, &sd->atime);
 	cputod32((__u32) inode->i_ctime.tv_sec, &sd->ctime);
 	cputod32((__u32) inode->i_mtime.tv_sec, &sd->mtime);
-	cputod32(kdev_val(inode->i_rdev), &sd->rdev);
+	cputod32(kdev_t_to_nr(inode->i_rdev), &sd->rdev);
 	cputod64((__u64) inode_get_bytes(inode), &sd->bytes);
 	*area += sizeof *sd;
 	return 0;

Reply via email to