
From: viro@www.linux.org.uk

old_decode_dev()/old_encode_dev() added where needed in other filesystems. 
Parts in different filesystems are independent, but IMO it's not worse
splitting into a dozen of half-kilobyte patches.



 fs/cramfs/inode.c         |    3 ++-
 fs/efs/inode.c            |    2 +-
 fs/ext2/inode.c           |    4 ++--
 fs/ext3/inode.c           |    4 ++--
 fs/ext3/super.c           |    2 +-
 fs/freevxfs/vxfs_inode.c  |    2 +-
 fs/intermezzo/journal.c   |   10 ++++------
 fs/intermezzo/kml_reint.c |    5 +++--
 fs/intermezzo/vfs.c       |    2 +-
 fs/jffs/inode-v23.c       |    6 ++----
 fs/jffs2/dir.c            |    2 +-
 fs/jffs2/fs.c             |    3 ++-
 fs/minix/inode.c          |    8 ++++----
 fs/ncpfs/dir.c            |    4 ++--
 fs/ncpfs/inode.c          |    3 ++-
 fs/nfsd/nfsproc.c         |    3 ++-
 fs/reiserfs/inode.c       |    6 +++---
 fs/reiserfs/journal.c     |    3 +--
 fs/sysv/inode.c           |   14 +++++++-------
 19 files changed, 43 insertions(+), 43 deletions(-)

diff -puN fs/cramfs/inode.c~large-dev_t-2nd-15 fs/cramfs/inode.c
--- 25/fs/cramfs/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/cramfs/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -71,7 +71,8 @@ static struct inode *get_cramfs_inode(st
 			inode->i_data.a_ops = &cramfs_aops;
 		} else {
 			inode->i_size = 0;
-			init_special_inode(inode, inode->i_mode, cramfs_inode->size);
+			init_special_inode(inode, inode->i_mode,
+				old_decode_dev(cramfs_inode->size));
 		}
 	}
 	return inode;
diff -puN fs/efs/inode.c~large-dev_t-2nd-15 fs/efs/inode.c
--- 25/fs/efs/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/efs/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -117,7 +117,7 @@ void efs_read_inode(struct inode *inode)
 	 * to see whether odev contains 65535. if this is the case then we
 	 * should then do device = be32_to_cpu(efs_inode->di_u.di_dev.ndev).
 	 */
-    	device = be16_to_cpu(efs_inode->di_u.di_dev.odev);
+    	device = old_decode_dev(be16_to_cpu(efs_inode->di_u.di_dev.odev));
 
 	/* get the number of extents for this object */
 	in->numextents = be16_to_cpu(efs_inode->di_numextents);
diff -puN fs/ext2/inode.c~large-dev_t-2nd-15 fs/ext2/inode.c
--- 25/fs/ext2/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/ext2/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -1127,7 +1127,7 @@ void ext2_read_inode (struct inode * ino
 	} else {
 		inode->i_op = &ext2_special_inode_operations;
 		init_special_inode(inode, inode->i_mode,
-				   le32_to_cpu(raw_inode->i_block[0]));
+			   old_decode_dev(le32_to_cpu(raw_inode->i_block[0])));
 	}
 	brelse (bh);
 	ext2_set_inode_flags(inode);
@@ -1216,7 +1216,7 @@ static int ext2_update_inode(struct inod
 	
 	raw_inode->i_generation = cpu_to_le32(inode->i_generation);
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-		raw_inode->i_block[0] = cpu_to_le32(inode->i_rdev);
+		raw_inode->i_block[0] = cpu_to_le32(old_encode_dev(inode->i_rdev));
 	else for (n = 0; n < EXT2_N_BLOCKS; n++)
 		raw_inode->i_block[n] = ei->i_data[n];
 	mark_buffer_dirty(bh);
diff -puN fs/ext3/inode.c~large-dev_t-2nd-15 fs/ext3/inode.c
--- 25/fs/ext3/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/ext3/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -2566,7 +2566,7 @@ void ext3_read_inode(struct inode * inod
 	} else {
 		inode->i_op = &ext3_special_inode_operations;
 		init_special_inode(inode, inode->i_mode,
-				   le32_to_cpu(raw_inode->i_block[0]));
+			   old_decode_dev(le32_to_cpu(raw_inode->i_block[0])));
 	}
 	brelse (iloc.bh);
 	ext3_set_inode_flags(inode);
@@ -2668,7 +2668,7 @@ static int ext3_do_update_inode(handle_t
 	raw_inode->i_generation = cpu_to_le32(inode->i_generation);
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
 		raw_inode->i_block[0] =
-			cpu_to_le32(inode->i_rdev);
+			cpu_to_le32(old_encode_dev(inode->i_rdev));
 	else for (block = 0; block < EXT3_N_BLOCKS; block++)
 		raw_inode->i_block[block] = ei->i_data[block];
 
diff -puN fs/ext3/super.c~large-dev_t-2nd-15 fs/ext3/super.c
--- 25/fs/ext3/super.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/ext3/super.c	2003-09-05 00:50:13.000000000 -0700
@@ -1604,7 +1604,7 @@ static int ext3_load_journal(struct supe
 {
 	journal_t *journal;
 	int journal_inum = le32_to_cpu(es->s_journal_inum);
-	dev_t journal_dev = le32_to_cpu(es->s_journal_dev);
+	dev_t journal_dev = old_decode_dev(le32_to_cpu(es->s_journal_dev));
 	int err = 0;
 	int really_read_only;
 
diff -puN fs/freevxfs/vxfs_inode.c~large-dev_t-2nd-15 fs/freevxfs/vxfs_inode.c
--- 25/fs/freevxfs/vxfs_inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/freevxfs/vxfs_inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -333,7 +333,7 @@ vxfs_read_inode(struct inode *ip)
 		} else
 			ip->i_op = &vxfs_immed_symlink_iops;
 	} else
-		init_special_inode(ip, ip->i_mode, vip->vii_rdev);
+		init_special_inode(ip, ip->i_mode, old_decode_dev(vip->vii_rdev));
 
 	return;
 }
diff -puN fs/intermezzo/journal.c~large-dev_t-2nd-15 fs/intermezzo/journal.c
--- 25/fs/intermezzo/journal.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/intermezzo/journal.c	2003-09-05 00:50:13.000000000 -0700
@@ -391,13 +391,11 @@ static inline char *log_version(char *bu
 static inline char *log_rollback(char *buf, struct izo_rollback_data *rb)
 {
         struct izo_rollback_data rollback;
-
-        memcpy(&rollback, rb, sizeof(rollback));
         
-        rollback.rb_mode = HTON__u32(rollback.rb_mode);
-        rollback.rb_rdev = HTON__u32(rollback.rb_rdev);
-        rollback.rb_uid = HTON__u64(rollback.rb_uid);
-        rollback.rb_gid = HTON__u64(rollback.rb_gid);
+        rollback.rb_mode = HTON__u32(rb->rb_mode);
+        rollback.rb_rdev = HTON__u32(rb->rb_rdev);
+        rollback.rb_uid = HTON__u64(rb->rb_uid);
+        rollback.rb_gid = HTON__u64(rb->rb_gid);
 
         return logit(buf, &rollback, sizeof(rollback));
 }
diff -puN fs/intermezzo/kml_reint.c~large-dev_t-2nd-15 fs/intermezzo/kml_reint.c
--- 25/fs/intermezzo/kml_reint.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/intermezzo/kml_reint.c	2003-09-05 00:50:13.000000000 -0700
@@ -236,7 +236,8 @@ static int reint_mknod(struct kml_rec *r
                        struct lento_vfs_context *info)
 {
         struct run_ctxt saved_ctxt;
-        int     error, dev;
+        int     error;
+	dev_t dev;
 
         ENTRY;
 
@@ -245,7 +246,7 @@ static int reint_mknod(struct kml_rec *r
         info->updated_time.tv_nsec = rec->new_objectv->pv_ctime_nsec;
         kmlreint_pre_secure(rec, dir, &saved_ctxt);
 
-        dev = rec->rdev ?: MKDEV(rec->major, rec->minor);
+        dev = rec->rdev ? old_decode_dev(rec->rdev) : MKDEV(rec->major, rec->minor);
 
         error = lento_mknod(rec->path, rec->mode, dev, info);
         pop_ctxt(&saved_ctxt); 
diff -puN fs/intermezzo/vfs.c~large-dev_t-2nd-15 fs/intermezzo/vfs.c
--- 25/fs/intermezzo/vfs.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/intermezzo/vfs.c	2003-09-05 00:50:13.000000000 -0700
@@ -290,7 +290,7 @@ int presto_settime(struct presto_file_se
 void izo_get_rollback_data(struct inode *inode, struct izo_rollback_data *rb)
 {
         rb->rb_mode = (__u32)inode->i_mode;
-        rb->rb_rdev = (__u32)inode->i_rdev;
+        rb->rb_rdev = (__u32)old_encode_dev(inode->i_rdev);
         rb->rb_uid  = (__u64)inode->i_uid;
         rb->rb_gid  = (__u64)inode->i_gid;
 }
diff -puN fs/jffs2/dir.c~large-dev_t-2nd-15 fs/jffs2/dir.c
--- 25/fs/jffs2/dir.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/jffs2/dir.c	2003-09-05 00:50:13.000000000 -0700
@@ -601,7 +601,7 @@ static int jffs2_mknod (struct inode *di
 	c = JFFS2_SB_INFO(dir_i->i_sb);
 	
 	if (S_ISBLK(mode) || S_ISCHR(mode)) {
-		dev = cpu_to_je16((MAJOR(rdev) << 8) | MINOR(rdev));
+		dev = cpu_to_je16(old_encode_dev(rdev));
 		devlen = sizeof(dev);
 	}
 	
diff -puN fs/jffs2/fs.c~large-dev_t-2nd-15 fs/jffs2/fs.c
--- 25/fs/jffs2/fs.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/jffs2/fs.c	2003-09-05 00:50:13.000000000 -0700
@@ -147,7 +147,8 @@ void jffs2_read_inode (struct inode *ino
 	case S_IFSOCK:
 	case S_IFIFO:
 		inode->i_op = &jffs2_file_inode_operations;
-		init_special_inode(inode, inode->i_mode, MKDEV(je16_to_cpu(rdev)>>8, je16_to_cpu(rdev)&0xff));
+		init_special_inode(inode, inode->i_mode,
+			old_decode_dev(je16_to_cpu(rdev)));
 		break;
 
 	default:
diff -puN fs/jffs/inode-v23.c~large-dev_t-2nd-15 fs/jffs/inode-v23.c
--- 25/fs/jffs/inode-v23.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/jffs/inode-v23.c	2003-09-05 00:50:13.000000000 -0700
@@ -1079,11 +1079,9 @@ jffs_mknod(struct inode *dir, struct den
 	struct jffs_control *c;
 	struct inode *inode;
 	int result = 0;
-	u16 data;
+	u16 data = old_encode_dev(rdev);
 	int err;
 
-	data = (MAJOR(rdev) << 8) | MINOR(rdev);
-
 	D1(printk("***jffs_mknod()\n"));
 
 	lock_kernel();
@@ -1736,7 +1734,7 @@ jffs_read_inode(struct inode *inode)
 		u16 val;
 		jffs_read_data(f, (char *)val, 0, 2);
 		init_special_inode(inode, inode->i_mode,
-			MKDEV((val >> 8) & 255, val & 255));
+			old_decode_dev(val));
 	}
 
 	D3(printk (KERN_NOTICE "read_inode(): up biglock\n"));
diff -puN fs/minix/inode.c~large-dev_t-2nd-15 fs/minix/inode.c
--- 25/fs/minix/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/minix/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -393,7 +393,7 @@ static void V1_minix_read_inode(struct i
 	inode->i_blocks = inode->i_blksize = 0;
 	for (i = 0; i < 9; i++)
 		minix_inode->u.i1_data[i] = raw_inode->i_zone[i];
-	minix_set_inode(inode, raw_inode->i_zone[0]);
+	minix_set_inode(inode, old_decode_dev(raw_inode->i_zone[0]));
 	brelse(bh);
 }
 
@@ -426,7 +426,7 @@ static void V2_minix_read_inode(struct i
 	inode->i_blocks = inode->i_blksize = 0;
 	for (i = 0; i < 10; i++)
 		minix_inode->u.i2_data[i] = raw_inode->i_zone[i];
-	minix_set_inode(inode, raw_inode->i_zone[0]);
+	minix_set_inode(inode, old_decode_dev(raw_inode->i_zone[0]));
 	brelse(bh);
 }
 
@@ -461,7 +461,7 @@ static struct buffer_head * V1_minix_upd
 	raw_inode->i_size = inode->i_size;
 	raw_inode->i_time = inode->i_mtime.tv_sec;
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-		raw_inode->i_zone[0] = inode->i_rdev;
+		raw_inode->i_zone[0] = old_encode_dev(inode->i_rdev);
 	else for (i = 0; i < 9; i++)
 		raw_inode->i_zone[i] = minix_inode->u.i1_data[i];
 	mark_buffer_dirty(bh);
@@ -490,7 +490,7 @@ static struct buffer_head * V2_minix_upd
 	raw_inode->i_atime = inode->i_atime.tv_sec;
 	raw_inode->i_ctime = inode->i_ctime.tv_sec;
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-		raw_inode->i_zone[0] = inode->i_rdev;
+		raw_inode->i_zone[0] = old_encode_dev(inode->i_rdev);
 	else for (i = 0; i < 10; i++)
 		raw_inode->i_zone[i] = minix_inode->u.i2_data[i];
 	mark_buffer_dirty(bh);
diff -puN fs/ncpfs/dir.c~large-dev_t-2nd-15 fs/ncpfs/dir.c
--- 25/fs/ncpfs/dir.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/ncpfs/dir.c	2003-09-05 00:50:13.000000000 -0700
@@ -929,10 +929,10 @@ int ncp_create_new(struct inode *dir, st
 	finfo.access = opmode;
 	if (ncp_is_nfs_extras(server, finfo.volume)) {
 		finfo.i.nfs.mode = mode;
-		finfo.i.nfs.rdev = rdev;
+		finfo.i.nfs.rdev = old_encode_dev(rdev);
 		if (ncp_modify_nfs_info(server, finfo.volume,
 					finfo.i.dirEntNum,
-					mode, rdev) != 0)
+					mode, old_encode_dev(rdev)) != 0)
 			goto out;
 	}
 
diff -puN fs/ncpfs/inode.c~large-dev_t-2nd-15 fs/ncpfs/inode.c
--- 25/fs/ncpfs/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/ncpfs/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -262,7 +262,8 @@ ncp_iget(struct super_block *sb, struct 
 			inode->i_fop = &ncp_dir_operations;
 #ifdef CONFIG_NCPFS_NFS_NS
 		} else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
-			init_special_inode(inode, inode->i_mode, info->i.nfs.rdev);
+			init_special_inode(inode, inode->i_mode,
+				old_decode_dev(info->i.nfs.rdev));
 #endif
 #if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS)
 		} else if (S_ISLNK(inode->i_mode)) {
diff -puN fs/nfsd/nfsproc.c~large-dev_t-2nd-15 fs/nfsd/nfsproc.c
--- 25/fs/nfsd/nfsproc.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/nfsd/nfsproc.c	2003-09-05 00:50:13.000000000 -0700
@@ -279,7 +279,8 @@ nfsd_proc_create(struct svc_rqst *rqstp,
 		int	is_borc = 0;
 		u32	size = attr->ia_size;
 
-		rdev = (dev_t) size;
+		/* may need to change when we widen dev_t */
+		rdev = old_decode_dev(size);
 		if (type != S_IFBLK && type != S_IFCHR) {
 			rdev = 0;
 		} else if (type == S_IFCHR && !(attr->ia_valid & ATTR_SIZE)) {
diff -puN fs/reiserfs/inode.c~large-dev_t-2nd-15 fs/reiserfs/inode.c
--- 25/fs/reiserfs/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/reiserfs/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -1003,7 +1003,7 @@ static void init_inode (struct inode * i
 	inode->i_mapping->a_ops = &reiserfs_address_space_operations;
     } else {
 	inode->i_blocks = 0;
-	init_special_inode(inode, inode->i_mode, rdev) ;
+	init_special_inode(inode, inode->i_mode, old_decode_dev(rdev));
     }
 }
 
@@ -1024,7 +1024,7 @@ static void inode2sd (void * sd, struct 
     set_sd_v2_ctime(sd_v2, inode->i_ctime.tv_sec );
     set_sd_v2_blocks(sd_v2, inode->i_blocks );
     if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-	set_sd_v2_rdev(sd_v2, inode->i_rdev);
+	set_sd_v2_rdev(sd_v2, old_encode_dev(inode->i_rdev));
     else
 	set_sd_v2_generation(sd_v2, inode->i_generation);
     flags = REISERFS_I(inode)->i_attrs;
@@ -1048,7 +1048,7 @@ static void inode2sd_v1 (void * sd, stru
     set_sd_v1_mtime(sd_v1, inode->i_mtime.tv_sec );
 
     if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-        set_sd_v1_rdev(sd_v1, inode->i_rdev);
+        set_sd_v1_rdev(sd_v1, old_encode_dev(inode->i_rdev));
     else
         set_sd_v1_blocks(sd_v1, inode->i_blocks );
 
diff -puN fs/reiserfs/journal.c~large-dev_t-2nd-15 fs/reiserfs/journal.c
--- 25/fs/reiserfs/journal.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/reiserfs/journal.c	2003-09-05 00:50:13.000000000 -0700
@@ -1906,7 +1906,7 @@ static int journal_init_dev( struct supe
 	journal -> j_dev_bd = NULL;
 	journal -> j_dev_file = NULL;
 	jdev = SB_ONDISK_JOURNAL_DEVICE( super ) ?
-		SB_ONDISK_JOURNAL_DEVICE( super ) : super->s_dev;	
+		old_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev;	
 
 	if (bdev_read_only(super->s_bdev))
 	    blkdev_mode = FMODE_READ;
@@ -1939,7 +1939,6 @@ static int journal_init_dev( struct supe
 			result = -ENOMEM;
 		} else  {
 			/* ok */
-			jdev = jdev_inode -> i_bdev -> bd_dev;
 			set_blocksize(journal->j_dev_bd, super->s_blocksize);
 		}
 	} else {
diff -puN fs/sysv/inode.c~large-dev_t-2nd-15 fs/sysv/inode.c
--- 25/fs/sysv/inode.c~large-dev_t-2nd-15	2003-09-05 00:50:13.000000000 -0700
+++ 25-akpm/fs/sysv/inode.c	2003-09-05 00:50:13.000000000 -0700
@@ -164,10 +164,8 @@ static void sysv_read_inode(struct inode
 	struct buffer_head * bh;
 	struct sysv_inode * raw_inode;
 	struct sysv_inode_info * si;
-	unsigned int block, ino;
-	dev_t rdev = 0;
+	unsigned int block, ino = inode->i_ino;
 
-	ino = inode->i_ino;
 	if (!ino || ino > sbi->s_ninodes) {
 		printk("Bad inode number on dev %s: %d is out of range\n",
 		       inode->i_sb->s_id, ino);
@@ -198,10 +196,12 @@ static void sysv_read_inode(struct inode
 		read3byte(sbi, &raw_inode->i_data[3*block],
 				(u8 *)&si->i_data[block]);
 	brelse(bh);
-	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-		rdev = (u16)fs32_to_cpu(sbi, si->i_data[0]);
 	si->i_dir_start_lookup = 0;
-	sysv_set_inode(inode, rdev);
+	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
+		sysv_set_inode(inode,
+			       old_decode_dev(fs32_to_cpu(sbi, si->i_data[0])));
+	else
+		sysv_set_inode(inode, 0);
 	return;
 
 bad_inode:
@@ -241,7 +241,7 @@ static struct buffer_head * sysv_update_
 
 	si = SYSV_I(inode);
 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-		si->i_data[0] = cpu_to_fs32(sbi, inode->i_rdev);
+		si->i_data[0] = cpu_to_fs32(sbi, old_encode_dev(inode->i_rdev));
 	for (block = 0; block < 10+1+1+1; block++)
 		write3byte(sbi, (u8 *)&si->i_data[block],
 			&raw_inode->i_data[3*block]);

_
