<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

Ditto for ext3.


 25-akpm/fs/ext3/inode.c |   30 +++++++++++++++++++++++-------
 1 files changed, 23 insertions(+), 7 deletions(-)

diff -puN fs/ext3/inode.c~ext3-64-bit-special-inodes fs/ext3/inode.c
--- 25/fs/ext3/inode.c~ext3-64-bit-special-inodes	Fri Aug  1 12:52:49 2003
+++ 25-akpm/fs/ext3/inode.c	Fri Aug  1 12:52:49 2003
@@ -2564,9 +2564,15 @@ void ext3_read_inode(struct inode * inod
 			ext3_set_aops(inode);
 		}
 	} else {
+		dev_t devno = le32_to_cpu(raw_inode-&gt;i_block[0]);
+		if (devno == 0) {
+			unsigned int lo = le32_to_cpu(raw_inode-&gt;i_block[1]);
+			unsigned int hi = le32_to_cpu(raw_inode-&gt;i_block[2]);
+			devno = ((unsigned long long) hi &lt;&lt; 32) | lo;
+		}
+
 		inode-&gt;i_op = &amp;ext3_special_inode_operations;
-		init_special_inode(inode, inode-&gt;i_mode,
-				   le32_to_cpu(raw_inode-&gt;i_block[0]));
+		init_special_inode(inode, inode-&gt;i_mode, devno);
 	}
 	brelse (iloc.bh);
 	ext3_set_inode_flags(inode);
@@ -2666,12 +2672,22 @@ static int ext3_do_update_inode(handle_t
 		}
 	}
 	raw_inode-&gt;i_generation = cpu_to_le32(inode-&gt;i_generation);
-	if (S_ISCHR(inode-&gt;i_mode) || S_ISBLK(inode-&gt;i_mode))
-		raw_inode-&gt;i_block[0] =
-			cpu_to_le32(kdev_t_to_nr(inode-&gt;i_rdev));
-	else for (block = 0; block &lt; EXT3_N_BLOCKS; block++)
-		raw_inode-&gt;i_block[block] = ei-&gt;i_data[block];
+	if (S_ISCHR(inode-&gt;i_mode) || S_ISBLK(inode-&gt;i_mode)) {
+		dev_t devno = kdev_t_to_nr(inode-&gt;i_rdev);
+		unsigned int hi = (sizeof(dev_t) &gt; 4) ? (devno &gt;&gt; 32) : 0;
+		unsigned int lo = (devno &amp; 0xffffffff);
 
+		if (hi == 0 &amp;&amp; lo != 0) {
+			raw_inode-&gt;i_block[0] = cpu_to_le32(lo);
+		} else {
+			raw_inode-&gt;i_block[0] = 0;
+			raw_inode-&gt;i_block[1] = cpu_to_le32(lo);
+			raw_inode-&gt;i_block[2] = cpu_to_le32(hi);
+		}
+	} else {
+		for (block = 0; block &lt; EXT3_N_BLOCKS; block++)
+			raw_inode-&gt;i_block[block] = ei-&gt;i_data[block];
+	}
 	BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
 	rc = ext3_journal_dirty_metadata(handle, bh);
 	if (!err)

_
</pre></body></html>