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]); _