[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