While doing so I encountered jffs/inode-v23.c:jffs_mknod().
It does
jffs_mknod(struct inode *dir, struct dentry *dentry, int mode, int rdev) {
	kdev_t dev = to_kdev_t(rdev);
	raw_inode.dsize = sizeof(kdev_t);
	jffs_write_node(c, node, &raw_inode, dentry->d_name.name,
		(unsigned char *)&dev, 0, NULL);
}
a rather strange thing to do. A kdev_t is a kernel-internal thing.
For me it is a pointer, others perhaps think of it as an integer,
but its size and format depend on the kernel version.
Moreover, the result of this will depend on the machine's endianness.
Normally, a filesystem should define its own data format.
What format should be written?
Andries
--- /linux/2.5/linux-2.5.47/linux/fs/jffs/inode-v23.c	Sat Oct 12 19:28:48 2002
+++ /linux/2.5/linux-2.5.47d/linux/fs/jffs/inode-v23.c	Mon Nov 18 04:33:11 2002
@@ -1069,7 +1069,7 @@
 
 
 static int
-jffs_mknod(struct inode *dir, struct dentry *dentry, int mode, int rdev)
+jffs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
 {
 	struct jffs_raw_inode raw_inode;
 	struct jffs_file *dir_f;
@@ -1077,7 +1077,6 @@
 	struct jffs_control *c;
 	struct inode *inode;
 	int result = 0;
-	kdev_t dev = to_kdev_t(rdev);
 	int err;
 
 	D1(printk("***jffs_mknod()\n"));
@@ -1111,7 +1110,7 @@
 	raw_inode.mtime = raw_inode.atime;
 	raw_inode.ctime = raw_inode.atime;
 	raw_inode.offset = 0;
-	raw_inode.dsize = sizeof(kdev_t);
+	raw_inode.dsize = sizeof(dev_t);
 	raw_inode.rsize = 0;
 	raw_inode.nsize = dentry->d_name.len;
 	raw_inode.nlink = 1;
@@ -1121,7 +1120,7 @@
 
 	/* Write the new node to the flash.  */
 	if ((err = jffs_write_node(c, node, &raw_inode, dentry->d_name.name,
-				   (unsigned char *)&dev, 0, NULL)) < 0) {
+				   (unsigned char *)&rdev, 0, NULL)) < 0) {
 		D(printk("jffs_mknod(): jffs_write_node() failed.\n"));
 		result = err;
 		goto jffs_mknod_err;
@@ -1724,9 +1723,9 @@
 		/* If the node is a device of some sort, then the number of
 		   the device should be read from the flash memory and then
 		   added to the inode's i_rdev member.  */
-		kdev_t rdev;
-		jffs_read_data(f, (char *)&rdev, 0, sizeof(kdev_t));
-		init_special_inode(inode, inode->i_mode, kdev_t_to_nr(rdev));
+		dev_t rdev;
+		jffs_read_data(f, (char *)&rdev, 0, sizeof(dev_t));
+		init_special_inode(inode, inode->i_mode, rdev);
 	}
 
 	D3(printk (KERN_NOTICE "read_inode(): up biglock\n"));
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/