[Ocfs2-commits] jlbec commits r1137 - trunk/src

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Thu Jun 17 21:35:17 CDT 2004


Author: jlbec
Date: 2004-06-17 20:35:15 -0500 (Thu, 17 Jun 2004)
New Revision: 1137

Modified:
   trunk/src/dir.c
   trunk/src/inode.c
   trunk/src/namei.c
   trunk/src/ocfs.h
Log:

o Make ocfs2_dir_entry->inode work in blocks, not bytes.



Modified: trunk/src/dir.c
===================================================================
--- trunk/src/dir.c	2004-06-18 00:55:28 UTC (rev 1136)
+++ trunk/src/dir.c	2004-06-18 01:35:15 UTC (rev 1137)
@@ -167,7 +167,7 @@
 				error = filldir(dirent, de->name,
 						de->name_len,
 						filp->f_pos,
-						ino_from_off(sb, le64_to_cpu(de->inode)),
+						ino_from_blkno(sb, le64_to_cpu(de->inode)),
 						d_type);
 				if (error)
 					break;
@@ -225,7 +225,7 @@
 	if (!*dirent_bh || !*dirent)
 		goto leave;
 
-	*fe_off = (*dirent)->inode;
+	*fe_off = (*dirent)->inode << inode->i_sb->s_blocksize_bits;
 
 	status = 0;
 leave:
@@ -278,7 +278,9 @@
 	de = (struct ocfs2_dir_entry *) bh->b_data;
 	de1 = (struct ocfs2_dir_entry *)
 			((char *) de + le16_to_cpu(de->rec_len));
-	if (le64_to_cpu(de->inode) != GET_INODE_FEOFF(inode) || 
+	/* Argh, should have blkno on inode_private */
+	if ((le64_to_cpu(de->inode) !=
+	     (GET_INODE_FEOFF(inode) >> sb->s_blocksize_bits)) || 
 			!le64_to_cpu(de1->inode) || 
 			strcmp (".", de->name) ||
 			strcmp ("..", de1->name)) {

Modified: trunk/src/inode.c
===================================================================
--- trunk/src/inode.c	2004-06-18 00:55:28 UTC (rev 1136)
+++ trunk/src/inode.c	2004-06-18 01:35:15 UTC (rev 1137)
@@ -397,9 +397,7 @@
 		OCFS_I(inode)->oin_flags |= OCFS_OIN_DIRECTORY;
 
 	if (create_ino)
-		inode->i_ino =
-			ino_from_off(inode->i_sb,
-				     fe->i_blkno << osb->sb->s_blocksize_bits);
+		inode->i_ino = ino_from_blkno(inode->i_sb, fe->i_blkno);
 
 	LOG_TRACE_ARGS("blkno = %llu, ino = %lu, create_ino = %s\n",
 		       fe->i_blkno, inode->i_ino,

Modified: trunk/src/namei.c
===================================================================
--- trunk/src/namei.c	2004-06-18 00:55:28 UTC (rev 1136)
+++ trunk/src/namei.c	2004-06-18 01:35:15 UTC (rev 1137)
@@ -104,12 +104,12 @@
 
 static inline int ocfs_add_entry(ocfs_journal_handle *handle, 
 				 struct dentry *dentry, 
-				 struct inode *inode, __u64 inode_off, 
+				 struct inode *inode, u64 blkno, 
 				 struct buffer_head *parent_fe_bh) 
 {
 	return(__ocfs_add_entry(handle, dentry->d_parent->d_inode, 
 				dentry->d_name.name, dentry->d_name.len, 
-				inode, inode_off, parent_fe_bh));
+				inode, blkno, parent_fe_bh));
 }
 
 /*
@@ -172,8 +172,8 @@
 	return ret;
 }				/* ocfs_lookup */
 
-int ocfs_mknod (struct inode *dir, struct dentry *dentry, int mode, 
-		ocfs_dev dev)
+int ocfs_mknod(struct inode *dir, struct dentry *dentry, int mode, 
+	       ocfs_dev dev)
 {
 	int status = 0;
 	struct buffer_head *parent_fe_bh = NULL;
@@ -243,19 +243,17 @@
 		goto leave;
 	}
 
-	fe = (ocfs2_dinode *) new_fe_bh->b_data;
+	fe = (ocfs2_dinode *)new_fe_bh->b_data;
 
-	ocfs_populate_inode (inode, fe, 1);
+	ocfs_populate_inode(inode, fe, 1);
 
-	file_off = fe->i_blkno << osb->sb->s_blocksize_bits;
-	handle->new_file_lockid =
-    		fe->i_blkno << osb->sb->s_blocksize_bits;
-	fe = NULL;
+	file_off = fe->i_blkno << dir->i_sb->s_blocksize_bits;
+	handle->new_file_lockid = file_off;
 
-	ocfs_init_lockres (osb, inode);
+	ocfs_init_lockres(osb, inode);
 
-	status = ocfs_update_lockres (osb, GET_INODE_FEOFF(inode), 
-				      &new_fe_bh, NULL, 0, inode, 0, 0);
+	status = ocfs_update_lockres(osb, GET_INODE_FEOFF(inode), 
+				     &new_fe_bh, NULL, 0, inode, 0, 0);
 	if (S_ISDIR (mode)) {
 		struct buffer_head *newdirbh = NULL;
 		int retval = 0;
@@ -273,14 +271,15 @@
 			goto leave;
 		}
 		de = (struct ocfs2_dir_entry *) newdirbh->b_data;
-		de->inode = cpu_to_le64(file_off);
+		de->inode = cpu_to_le64(fe->i_blkno);
+		fe = NULL;
 		de->name_len = 1;
 		de->rec_len =
 			cpu_to_le16(OCFS2_DIR_REC_LEN(de->name_len));
 		strcpy (de->name, ".");
 		ocfs_set_de_type(dir->i_sb, de, S_IFDIR);
 		de = (struct ocfs2_dir_entry *) ((char *) de + le16_to_cpu(de->rec_len));
-		de->inode = cpu_to_le64(GET_INODE_FEOFF(dir));
+		de->inode = cpu_to_le64(GET_INODE_FEOFF(dir) >> dir->i_sb->s_blocksize_bits);
 		de->rec_len = cpu_to_le16(inode->i_sb->s_blocksize -
 					  OCFS2_DIR_REC_LEN(1));
 		de->name_len = 2;
@@ -357,6 +356,7 @@
 	ocfs2_dinode *fe = NULL;
 	ocfs2_extent_list *fel;
 	__u64 disk_off = 0;
+	u64 fe_blkno = 0;
 	__u64 fileOffset = 0;
 	struct inode *inode_alloc_inode = NULL;
 	ocfs_node_map just_me;
@@ -386,8 +386,9 @@
 		LOG_ERROR_STATUS (status);
 		goto leave;
 	}
+	fe_blkno = disk_off >> osb->sb->s_blocksize_bits;
 
-	*new_fe_bh = sb_getblk(osb->sb, disk_off >> osb->sb->s_blocksize_bits);
+	*new_fe_bh = sb_getblk(osb->sb, fe_blkno);
 	if (!*new_fe_bh) {
 		status = -EIO;
 		LOG_ERROR_STATUS(status);
@@ -396,7 +397,8 @@
 	set_buffer_uptodate(*new_fe_bh);
 	SET_BH_SEQNUM(inode, *new_fe_bh);
 
-	status = ocfs_journal_access(handle, *new_fe_bh, OCFS_JOURNAL_ACCESS_CREATE);
+	status = ocfs_journal_access(handle, *new_fe_bh,
+				     OCFS_JOURNAL_ACCESS_CREATE);
 	if (status < 0) {
 		LOG_ERROR_STATUS (status);
 		goto leave;
@@ -404,14 +406,14 @@
 
 	fe = (ocfs2_dinode *) (*new_fe_bh)->b_data;
 	memset(fe, 0, osb->sb->s_blocksize);
-	inode->i_ino = ino_from_off(osb->sb, disk_off);
+	inode->i_ino = ino_from_blkno(osb->sb, fe_blkno);
 	/*
 	 * FIXME This needs to be
 	 * (node_num << 24) | (nodeconf->gen_counter++ & 0x00FFFFFF)
 	 */
 	inode->i_generation = 0;
 	fe->i_generation = cpu_to_le32(inode->i_generation);
-	fe->i_blkno = disk_off >> osb->sb->s_blocksize_bits;
+	fe->i_blkno = fe_blkno;
 	fe->i_suballoc_blkno = fileOffset >> osb->sb->s_blocksize_bits;
 	fe->i_suballoc_node = osb->node_num;
 	fe->i_uid = current->fsuid;
@@ -455,7 +457,7 @@
 	 * for add_entry. */
 	inode->i_mode = mode;
 
-	status = ocfs_add_entry(handle, dentry, inode, disk_off,
+	status = ocfs_add_entry(handle, dentry, inode, fe_blkno,
 				parent_fe_bh);
 	if (status < 0) {
 		LOG_ERROR_STATUS (status);
@@ -1002,7 +1004,8 @@
 	 *  and merrily kill the link to whatever was created under the
 	 *  same name. Goodbye sticky bit ;-<
 	 */
-	if (le64_to_cpu(old_de->inode) != GET_INODE_FEOFF(old_inode))
+	if (le64_to_cpu(old_de->inode) !=
+	    (GET_INODE_FEOFF(old_inode) >> new_dir->i_sb->s_blocksize_bits))
 		goto finally;
 
 	/* check if the target already exists (in which case we need
@@ -1101,7 +1104,7 @@
 			LOG_ERROR_STATUS (status);
 			goto finally;
 		}
-		new_de->inode = le64_to_cpu(GET_INODE_FEOFF(old_inode));
+		new_de->inode = le64_to_cpu(GET_INODE_FEOFF(old_inode) >> new_dir->i_sb->s_blocksize_bits);
 		new_de->file_type = old_de->file_type;
 		new_dir->i_version++;
 		status = ocfs_journal_dirty(handle, new_de_bh);
@@ -1399,7 +1402,7 @@
  * like orphan dir can call this instead. */
 static int __ocfs_add_entry (ocfs_journal_handle *handle, struct inode *dir,
 			     const char *name, int namelen, 
-			     struct inode *inode, __u64 inode_off, 
+			     struct inode *inode, u64 blkno, 
 			     struct buffer_head *parent_fe_bh) 
 {
 	unsigned long offset;
@@ -1477,8 +1480,8 @@
 				de = de1;
 			}
 			de->file_type = OCFS2_FT_UNKNOWN;
-			if (inode_off) {
-				de->inode = cpu_to_le64(inode_off);
+			if (blkno) {
+				de->inode = cpu_to_le64(blkno);
 				ocfs_set_de_type(dir->i_sb, de, inode->i_mode);
 			} else
 				de->inode = 0;

Modified: trunk/src/ocfs.h
===================================================================
--- trunk/src/ocfs.h	2004-06-18 00:55:28 UTC (rev 1136)
+++ trunk/src/ocfs.h	2004-06-18 01:35:15 UTC (rev 1137)
@@ -1188,6 +1188,12 @@
 	return (unsigned long)(block_off & (__u64)ULONG_MAX);
 }
 
+static inline unsigned long ino_from_blkno(struct super_block *sb,
+					   u64 blkno)
+{
+	return (unsigned long)(blkno & (u64)ULONG_MAX);
+}
+
 static inline unsigned long ino_from_off(struct super_block *sb,
 					 __u64 off)
 {



More information about the Ocfs2-commits mailing list