[Ocfs2-commits] jlbec commits r2307 - trunk/fs/ocfs2
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Mon May 23 18:28:07 CDT 2005
Author: jlbec
Signed-off-by: mfasheh
Date: 2005-05-23 18:28:05 -0500 (Mon, 23 May 2005)
New Revision: 2307
Modified:
trunk/fs/ocfs2/aio.c
trunk/fs/ocfs2/alloc.c
trunk/fs/ocfs2/aops.c
trunk/fs/ocfs2/buffer_head_io.c
trunk/fs/ocfs2/buffer_head_io.h
trunk/fs/ocfs2/dcache.c
trunk/fs/ocfs2/dir.c
trunk/fs/ocfs2/dlmglue.c
trunk/fs/ocfs2/dlmglue.h
trunk/fs/ocfs2/extent_map.c
trunk/fs/ocfs2/file.c
trunk/fs/ocfs2/heartbeat.c
trunk/fs/ocfs2/inode.c
trunk/fs/ocfs2/inode.h
trunk/fs/ocfs2/journal.c
trunk/fs/ocfs2/journal.h
trunk/fs/ocfs2/localalloc.c
trunk/fs/ocfs2/mmap.c
trunk/fs/ocfs2/mmap.h
trunk/fs/ocfs2/namei.c
trunk/fs/ocfs2/ocfs.h
trunk/fs/ocfs2/ocfs2.h
trunk/fs/ocfs2/proc.c
trunk/fs/ocfs2/slot_map.c
trunk/fs/ocfs2/suballoc.c
trunk/fs/ocfs2/suballoc.h
trunk/fs/ocfs2/super.c
trunk/fs/ocfs2/symlink.c
trunk/fs/ocfs2/vote.c
Log:
o Move to an ->alloc_inode() scheme. The former ocfs2_inode_private
is now an alloc_inode()-style container of struct inode,
struct ocfs2_inode_info.
Signed-off-by: mfasheh
Modified: trunk/fs/ocfs2/aio.c
===================================================================
--- trunk/fs/ocfs2/aio.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/aio.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -70,7 +70,7 @@
if (okp->kp_info.wl_unlock_ctxt)
ocfs2_unlock_buffer_inodes(&okp->kp_ctxt);
if (okp->kp_have_alloc_sem)
- up_read(&OCFS_I(okp->kp_inode)->ip_alloc_sem);
+ up_read(&OCFS2_I(okp->kp_inode)->ip_alloc_sem);
iput(okp->kp_inode);
kfree(okp);
@@ -280,7 +280,7 @@
/* hold the ip_alloc_sem across the op */
if (!okp->kp_have_alloc_sem) {
- down_read(&OCFS_I(inode)->ip_alloc_sem);
+ down_read(&OCFS2_I(inode)->ip_alloc_sem);
okp->kp_have_alloc_sem = 1;
}
@@ -344,7 +344,7 @@
/* hold the ip_alloc_sem across the op */
if (!okp->kp_have_alloc_sem) {
- down_read(&OCFS_I(inode)->ip_alloc_sem);
+ down_read(&OCFS2_I(inode)->ip_alloc_sem);
okp->kp_have_alloc_sem = 1;
}
Modified: trunk/fs/ocfs2/alloc.c
===================================================================
--- trunk/fs/ocfs2/alloc.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/alloc.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -769,7 +769,7 @@
mlog(0, "add %u clusters starting at block %"MLFu64" to "
"inode %"MLFu64"\n",
- new_clusters, start_blk, OCFS_I(inode)->ip_blkno);
+ new_clusters, start_blk, OCFS2_I(inode)->ip_blkno);
fe = (ocfs2_dinode *) fe_bh->b_data;
el = &fe->id2.i_list;
@@ -912,7 +912,7 @@
mlog_bug_on_msg(tl_count > ocfs2_truncate_recs_per_inode(osb->sb) ||
tl_count == 0,
"Truncate record count on #%"MLFu64" invalid ("
- "wanted %u, actual %u\n", OCFS_I(tl_inode)->ip_blkno,
+ "wanted %u, actual %u\n", OCFS2_I(tl_inode)->ip_blkno,
ocfs2_truncate_recs_per_inode(osb->sb),
le16_to_cpu(tl->tl_count));
@@ -933,7 +933,7 @@
mlog(0, "Log truncate of %u clusters starting at cluster %u to "
"%"MLFu64" (index = %d)\n", num_clusters, start_cluster,
- OCFS_I(tl_inode)->ip_blkno, index);
+ OCFS2_I(tl_inode)->ip_blkno, index);
if (ocfs2_truncate_log_can_coalesce(tl, start_cluster)) {
/* Coalesce with the most recent record if possible */
@@ -1056,7 +1056,7 @@
num_to_flush = le32_to_cpu(tl->tl_used);
mlog(0, "Flush %u records from truncate log #%"MLFu64"\n",
- num_to_flush, OCFS_I(tl_inode)->ip_blkno);
+ num_to_flush, OCFS2_I(tl_inode)->ip_blkno);
if (!num_to_flush) {
status = 0;
goto bail;
@@ -1170,7 +1170,7 @@
goto bail;
}
- status = ocfs_read_block(osb, OCFS_I(inode)->ip_blkno, &bh,
+ status = ocfs_read_block(osb, OCFS2_I(inode)->ip_blkno, &bh,
OCFS_BH_CACHED, inode);
if (status < 0) {
iput(inode);
@@ -1267,7 +1267,7 @@
mlog_entry();
- if (OCFS_I(tl_inode)->ip_blkno == tl_copy->i_blkno) {
+ if (OCFS2_I(tl_inode)->ip_blkno == tl_copy->i_blkno) {
mlog(ML_ERROR, "Asked to recover my own truncate log!\n");
return -EINVAL;
}
@@ -1483,9 +1483,9 @@
}
el = &(fe->id2.i_list);
- spin_lock(&OCFS_I(inode)->ip_lock);
- OCFS_I(inode)->ip_clusters = fe->i_clusters - clusters_to_del;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_clusters = fe->i_clusters - clusters_to_del;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
fe->i_clusters -= clusters_to_del;
fe->i_mtime = CURRENT_TIME.tv_sec;
fe->i_mtime_nsec = cpu_to_le32(CURRENT_TIME.tv_nsec);
@@ -1668,7 +1668,7 @@
mlog_entry_void();
- down_write(&OCFS_I(inode)->ip_alloc_sem);
+ down_write(&OCFS2_I(inode)->ip_alloc_sem);
target_i_clusters = ocfs2_clusters_for_bytes(osb->sb,
i_size_read(inode));
@@ -1783,7 +1783,7 @@
if (fe->i_clusters > target_i_clusters)
goto start;
bail:
- up_write(&OCFS_I(inode)->ip_alloc_sem);
+ up_write(&OCFS2_I(inode)->ip_alloc_sem);
ocfs2_schedule_truncate_log_flush(osb, 1);
Modified: trunk/fs/ocfs2/aops.c
===================================================================
--- trunk/fs/ocfs2/aops.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/aops.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -32,7 +32,6 @@
#include "ocfs2.h"
#include "alloc.h"
-#include "buffer_head_io.h"
#include "dlmglue.h"
#include "extent_map.h"
#include "file.h"
@@ -40,6 +39,8 @@
#include "journal.h"
#include "symlink.h"
+#include "buffer_head_io.h"
+
static int ocfs_symlink_get_block(struct inode *inode, sector_t iblock,
struct buffer_head *bh_result, int create)
{
@@ -62,7 +63,8 @@
goto bail;
}
- status = ocfs_read_block(OCFS2_SB(inode->i_sb), OCFS_I(inode)->ip_blkno,
+ status = ocfs_read_block(OCFS2_SB(inode->i_sb),
+ OCFS2_I(inode)->ip_blkno,
&bh, OCFS_BH_CACHED, inode);
if (status < 0) {
mlog_errno (status);
@@ -136,7 +138,7 @@
mlog_entry("(0x%p, %llu, 0x%p, %d)\n", inode,
(unsigned long long)iblock, bh_result, create);
- if (OCFS_I(inode)->ip_flags & OCFS_INODE_SYSTEM_FILE) {
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n",
inode, inode->i_ino);
}
@@ -151,15 +153,15 @@
vbo = (u64)iblock << inode->i_sb->s_blocksize_bits;
/* this can happen if another node truncs after our extend! */
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
if (iblock >=
ocfs2_clusters_to_blocks(inode->i_sb,
- OCFS_I(inode)->ip_clusters)) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_clusters)) {
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
err = -EIO;
goto bail;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
err = ocfs2_extent_map_get_blocks(inode, iblock, 1, &p_blkno,
NULL);
@@ -180,27 +182,27 @@
mlog(ML_ERROR, "iblock = %llu p_blkno = %"MLFu64" "
"blkno=(%"MLFu64")\n",
(unsigned long long)iblock, p_blkno,
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
}
- if (vbo < OCFS_I(inode)->ip_mmu_private)
+ if (vbo < OCFS2_I(inode)->ip_mmu_private)
goto bail;
if (!create)
goto bail;
- if (vbo != OCFS_I(inode)->ip_mmu_private) {
+ if (vbo != OCFS2_I(inode)->ip_mmu_private) {
mlog(ML_ERROR, "Uh-oh, vbo = %"MLFi64", i_size = %lld, "
"mmu = %lld, inode = %"MLFu64"\n",
vbo,
i_size_read(inode),
- OCFS_I(inode)->ip_mmu_private,
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_mmu_private,
+ OCFS2_I(inode)->ip_blkno);
BUG();
err = -EIO;
goto bail;
}
set_buffer_new(bh_result);
- OCFS_I(inode)->ip_mmu_private += inode->i_sb->s_blocksize;
+ OCFS2_I(inode)->ip_mmu_private += inode->i_sb->s_blocksize;
bail:
if (err < 0)
@@ -248,7 +250,7 @@
mlog_entry("(0x%p, 0x%p, %u, %u)\n", file, page, from, to);
ret = cont_prepare_write(page, from, to, ocfs_get_block,
- &(OCFS_I(page->mapping->host)->ip_mmu_private));
+ &(OCFS2_I(page->mapping->host)->ip_mmu_private));
mlog_exit(ret);
@@ -291,14 +293,14 @@
mlog_errno(err);
goto bail;
}
- down_read(&OCFS_I(inode)->ip_alloc_sem);
+ down_read(&OCFS2_I(inode)->ip_alloc_sem);
}
err = ocfs2_extent_map_get_blocks(inode, block, 1, &p_blkno,
NULL);
if (!INODE_JOURNAL(inode)) {
- up_read(&OCFS_I(inode)->ip_alloc_sem);
+ up_read(&OCFS2_I(inode)->ip_alloc_sem);
ocfs2_meta_unlock(inode, 0);
}
@@ -358,15 +360,15 @@
vbo_max = ((u64)iblock + max_blocks) << blocksize_bits;
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
if ((iblock + max_blocks) >
ocfs2_clusters_to_blocks(inode->i_sb,
- OCFS_I(inode)->ip_clusters)) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_clusters)) {
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
ret = -EIO;
goto bail;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
/* This figures out the size of the next contiguous block, and
* our logical offset */
Modified: trunk/fs/ocfs2/buffer_head_io.c
===================================================================
--- trunk/fs/ocfs2/buffer_head_io.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/buffer_head_io.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -34,6 +34,7 @@
#include "ocfs2.h"
#include "alloc.h"
+#include "inode.h"
#include "journal.h"
#include "buffer_head_io.h"
@@ -76,12 +77,12 @@
sb = osb->sb;
if (inode)
- down(&OCFS_I(inode)->ip_io_sem);
+ down(&OCFS2_I(inode)->ip_io_sem);
for (i = 0 ; i < nr ; i++) {
bh = bhs[i];
if (bh == NULL) {
if (inode)
- up(&OCFS_I(inode)->ip_io_sem);
+ up(&OCFS2_I(inode)->ip_io_sem);
status = -EIO;
mlog_errno(status);
goto bail;
@@ -124,7 +125,7 @@
CLEAR_BH_SEQNUM(bh);
}
if (inode)
- up(&OCFS_I(inode)->ip_io_sem);
+ up(&OCFS2_I(inode)->ip_io_sem);
bail:
@@ -170,13 +171,13 @@
sb = osb->sb;
if (inode)
- down(&OCFS_I(inode)->ip_io_sem);
+ down(&OCFS2_I(inode)->ip_io_sem);
for (i = 0 ; i < nr ; i++) {
if (bhs[i] == NULL) {
bhs[i] = sb_getblk(sb, block++);
if (bhs[i] == NULL) {
if (inode)
- up(&OCFS_I(inode)->ip_io_sem);
+ up(&OCFS2_I(inode)->ip_io_sem);
status = -EIO;
mlog_errno(status);
goto bail;
@@ -191,7 +192,7 @@
"not match inode (%u)\n",
(unsigned long long)bh->b_blocknr,
(bh->b_state & STATE_BIT_MASK) >> 19,
- atomic_read(GET_INODE_CLEAN_SEQ(inode)));
+ ocfs2_get_inode_seq(inode));
ignore_cache = 1;
}
@@ -257,7 +258,7 @@
CLEAR_BH_SEQNUM(bh);
}
if (inode)
- up(&OCFS_I(inode)->ip_io_sem);
+ up(&OCFS2_I(inode)->ip_io_sem);
mlog(ML_BH_IO, "block=(%"MLFu64"), nr=(%d), cached=%s\n", block, nr,
(!(flags & OCFS_BH_CACHED) || ignore_cache) ? "no" : "yes");
Modified: trunk/fs/ocfs2/buffer_head_io.h
===================================================================
--- trunk/fs/ocfs2/buffer_head_io.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/buffer_head_io.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -23,8 +23,8 @@
* Boston, MA 021110-1307, USA.
*/
-#ifndef OCFSIO_H
-#define OCFSIO_H
+#ifndef OCFS2_BUFFER_HEAD_IO_H
+#define OCFS2_BUFFER_HEAD_IO_H
#include <linux/buffer_head.h>
@@ -64,6 +64,11 @@
#define STATE_BIT_MASK ((~0UL) << USED_BH_BITS)
+static inline unsigned int ocfs2_get_inode_seq(struct inode *inode)
+{
+ return atomic_read(&OCFS2_I(inode)->ip_clean_buffer_seq);
+}
+
static inline void CLEAR_BH_SEQNUM(struct buffer_head *bh)
{
unsigned int prev = bh->b_state & STATE_BIT_MASK;
@@ -72,7 +77,7 @@
static inline void SET_BH_SEQNUM(struct inode *inode, struct buffer_head *bh)
{
- unsigned int seq = (atomic_read(GET_INODE_CLEAN_SEQ(inode)) &
+ unsigned int seq = (ocfs2_get_inode_seq(inode) &
STATE_BIT_MAX_MASK) << USED_BH_BITS;
CLEAR_BH_SEQNUM(bh);
@@ -85,7 +90,7 @@
unsigned int seq =
(bh->b_state & STATE_BIT_MASK) >> USED_BH_BITS;
- ret = (seq == atomic_read(GET_INODE_CLEAN_SEQ(inode)));
+ ret = (seq == ocfs2_get_inode_seq(inode));
return ret;
}
@@ -119,4 +124,4 @@
return status;
}
-#endif /* OCFSIO_H */
+#endif /* OCFS2_BUFFER_HEAD_IO_H */
Modified: trunk/fs/ocfs2/dcache.c
===================================================================
--- trunk/fs/ocfs2/dcache.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/dcache.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -36,6 +36,7 @@
#include "alloc.h"
#include "dcache.h"
#include "file.h"
+#include "inode.h"
static int ocfs_dentry_revalidate(struct dentry *dentry, struct nameidata *nd)
{
@@ -58,20 +59,20 @@
goto bail;
}
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
/* did we or someone else delete this inode? */
if (INODE_DELETED(inode)) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
mlog(0, "inode (%"MLFu64") deleted, returning false\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
goto bail;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
/* XXX: Should we do this for all files? */
if (S_ISDIR(inode->i_mode) && (!inode->i_nlink)) {
mlog(0, "dir inode (%"MLFu64") orphaned, returning false\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
goto bail;
}
Modified: trunk/fs/ocfs2/dir.c
===================================================================
--- trunk/fs/ocfs2/dir.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/dir.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -83,7 +83,7 @@
struct super_block * sb = inode->i_sb;
int have_disk_lock = 0;
- mlog_entry("dirino=%"MLFu64"\n", OCFS_I(inode)->ip_blkno);
+ mlog_entry("dirino=%"MLFu64"\n", OCFS2_I(inode)->ip_blkno);
stored = 0;
bh = NULL;
@@ -105,7 +105,7 @@
if (!bh) {
mlog(ML_ERROR, "directory #%"MLFu64" contains a hole "
"at offset %lld\n",
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
filp->f_pos);
filp->f_pos += sb->s_blocksize - offset;
continue;
@@ -216,7 +216,7 @@
mlog_entry ("(osb=%p, parent=%"MLFu64", name='%.*s', blkno=%p, "
"inode=%p)\n",
- osb, OCFS_I(inode)->ip_blkno, namelen, name, blkno, inode);
+ osb, OCFS2_I(inode)->ip_blkno, namelen, name, blkno, inode);
if (take_lock) {
/* Get a lock on the directory... */
@@ -273,20 +273,20 @@
!(bh = ocfs_bread (inode, 0, &err, 0))) {
mlog(ML_ERROR, "bad directory (dir #%"MLFu64") - "
"no data block\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
return 1;
}
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) != OCFS_I(inode)->ip_blkno) ||
+ if ((le64_to_cpu(de->inode) != OCFS2_I(inode)->ip_blkno) ||
!le64_to_cpu(de1->inode) ||
strcmp (".", de->name) ||
strcmp ("..", de1->name)) {
mlog(ML_ERROR, "bad directory (dir #%"MLFu64") - "
"no `.' or `..'\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
brelse (bh);
return 1;
}
@@ -300,7 +300,7 @@
if (!bh) {
mlog(ML_ERROR, "directory #%"MLFu64" contains "
"a hole at offset %lu\n",
- OCFS_I(inode)->ip_blkno, offset);
+ OCFS2_I(inode)->ip_blkno, offset);
offset += sb->s_blocksize;
continue;
}
@@ -335,9 +335,9 @@
int extend;
u64 p_blkno;
- spin_lock(&OCFS_I(dir)->ip_lock);
- extend = (i_size_read(dir) == ocfs2_clusters_to_bytes(sb, OCFS_I(dir)->ip_clusters));
- spin_unlock(&OCFS_I(dir)->ip_lock);
+ spin_lock(&OCFS2_I(dir)->ip_lock);
+ extend = (i_size_read(dir) == ocfs2_clusters_to_bytes(sb, OCFS2_I(dir)->ip_clusters));
+ spin_unlock(&OCFS2_I(dir)->ip_lock);
if (extend) {
status = ocfs_extend_allocation(OCFS2_SB(sb), dir, 1,
@@ -391,7 +391,7 @@
dir_i_size = i_size_read(dir);
mlog(0, "extending dir %"MLFu64" (i_size = %lld)\n",
- OCFS_I(dir)->ip_blkno, dir_i_size);
+ OCFS2_I(dir)->ip_blkno, dir_i_size);
handle = ocfs_alloc_handle(osb);
if (handle == NULL) {
@@ -401,9 +401,9 @@
}
/* dir->i_size is always block aligned. */
- spin_lock(&OCFS_I(dir)->ip_lock);
- if (dir_i_size == ocfs2_clusters_to_bytes(sb, OCFS_I(dir)->ip_clusters)) {
- spin_unlock(&OCFS_I(dir)->ip_lock);
+ spin_lock(&OCFS2_I(dir)->ip_lock);
+ if (dir_i_size == ocfs2_clusters_to_bytes(sb, OCFS2_I(dir)->ip_clusters)) {
+ spin_unlock(&OCFS2_I(dir)->ip_lock);
num_free_extents = ocfs_num_free_extents(osb, dir, fe);
if (num_free_extents < 0) {
status = num_free_extents;
@@ -430,7 +430,7 @@
credits = ocfs_calc_extend_credits(sb, fe, 1);
} else {
- spin_unlock(&OCFS_I(dir)->ip_lock);
+ spin_unlock(&OCFS2_I(dir)->ip_lock);
credits = OCFS_SIMPLE_DIR_EXTEND_CREDITS;
}
@@ -515,7 +515,7 @@
mlog_entry_void();
mlog(0, "getting ready to insert namelen %d into dir %"MLFu64"\n",
- namelen, OCFS_I(dir)->ip_blkno);
+ namelen, OCFS2_I(dir)->ip_blkno);
OCFS_ASSERT(S_ISDIR(dir->i_mode));
fe = (ocfs2_dinode *) parent_fe_bh->b_data;
Modified: trunk/fs/ocfs2/dlmglue.c
===================================================================
--- trunk/fs/ocfs2/dlmglue.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/dlmglue.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -63,6 +63,8 @@
#define OCFS2_LOCK_ID_MAX_LEN 32
#define OCFS2_LOCK_ID_PAD "000000"
+static spinlock_t clean_buffer_lock = SPIN_LOCK_UNLOCKED;
+
static char ocfs2_lock_type_char[OCFS_NUM_LOCK_TYPES] = {
[OCFS_TYPE_META] = 'M',
[OCFS_TYPE_DATA] = 'D',
@@ -317,6 +319,11 @@
res->l_priv = priv;
}
+void ocfs2_lock_res_init_once(ocfs2_lock_res *res)
+{
+ res->l_name = NULL;
+}
+
int ocfs2_inode_lock_res_init(ocfs2_lock_res *res,
enum ocfs2_lock_type type,
struct inode *inode)
@@ -336,7 +343,7 @@
res->l_ops = &ocfs2_inode_data_lops;
status = ocfs2_build_lock_name(type,
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
inode->i_generation,
&res->l_name);
if (status < 0) {
@@ -378,8 +385,12 @@
void ocfs2_lock_res_free(ocfs2_lock_res *res)
{
mlog_entry_void();
+
if (res->l_name)
kfree(res->l_name);
+
+ ocfs2_lock_res_init_once(res);
+
mlog_exit_void();
}
@@ -400,6 +411,7 @@
default:
BUG();
}
+
mlog_exit_void();
}
@@ -492,31 +504,33 @@
mlog_exit_void();
}
+void ocfs2_init_inode_seq(struct inode *inode)
+{
+ atomic_set(&OCFS2_I(inode)->ip_clean_buffer_seq,
+ atomic_read(&OCFS2_SB(inode->i_sb)->clean_buffer_seq));
+}
+
static void ocfs2_inc_inode_seq(ocfs_super *osb,
struct inode *inode)
{
- atomic_t *seq;
-
mlog_entry_void();
- seq = GET_INODE_CLEAN_SEQ(inode);
+ mlog(0, "incrementing inode seq... current is %d\n", ocfs2_get_inode_seq(inode));
- mlog(0, "incrementing inode seq... current is %d\n", atomic_read(seq));
-
/* wrap to ONE after 13 bits, will need a spinlock */
- spin_lock (&osb->clean_buffer_lock);
+ spin_lock (&clean_buffer_lock);
if ((atomic_read(&osb->clean_buffer_seq)+1) % STATE_BIT_MAX == 0)
atomic_set(&osb->clean_buffer_seq, 1);
else
atomic_inc(&osb->clean_buffer_seq);
- spin_unlock (&osb->clean_buffer_lock);
+ spin_unlock (&clean_buffer_lock);
/* doesn't matter if this another process */
/* has already incremented the global seq */
- atomic_set(seq, atomic_read(&osb->clean_buffer_seq));
+ ocfs2_init_inode_seq(inode);
mlog(0, "done incrementing inode seq... new is %d\n",
- atomic_read(seq));
+ ocfs2_get_inode_seq(inode));
mlog_exit_void();
}
@@ -586,13 +600,11 @@
osb = OCFS2_SB(inode->i_sb);
mlog(0, "AST fired for inode %"MLFu64", l_action = %u, type = %s\n",
- OCFS_I(inode)->ip_blkno, lockres->l_action,
+ OCFS2_I(inode)->ip_blkno, lockres->l_action,
(lockres->l_type == OCFS_TYPE_META) ? "Meta" : "Data");
OCFS_ASSERT(ocfs2_is_inode_lock(lockres));
- OCFS_ASSERT(OCFS_I(inode)->ip_flags & OCFS_INODE_INITIALIZED);
-
spin_lock(&lockres->l_lock);
lksb = &(lockres->l_lksb);
@@ -600,7 +612,7 @@
mlog(ML_ERROR, "ocfs2_inode_ast_func: lksb status value of %u "
"on inode %"MLFu64"\n",
lksb->status,
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
spin_unlock(&lockres->l_lock);
mlog_exit_void();
return;
@@ -682,7 +694,7 @@
osb = OCFS2_SB(inode->i_sb);
mlog(0, "BAST fired for inode %"MLFu64", blocking = %d, level = %d "
- "type = %s\n", OCFS_I(inode)->ip_blkno, level,
+ "type = %s\n", OCFS2_I(inode)->ip_blkno, level,
lockres->l_level,
(lockres->l_type == OCFS_TYPE_META) ? "Meta" : "Data");
@@ -1085,7 +1097,7 @@
* on a resource which has an invalid one -- we'll set it
* valid when we release the EX. */
- lockres = &OCFS_I(inode)->ip_meta_lockres;
+ lockres = &OCFS2_I(inode)->ip_meta_lockres;
spin_lock(&lockres->l_lock);
OCFS_ASSERT(!(lockres->l_flags & OCFS2_LOCK_ATTACHED));
@@ -1098,7 +1110,7 @@
goto bail;
}
- lockres = &OCFS_I(inode)->ip_data_lockres;
+ lockres = &OCFS2_I(inode)->ip_data_lockres;
spin_lock(&lockres->l_lock);
OCFS_ASSERT(!(lockres->l_flags & OCFS2_LOCK_ATTACHED));
@@ -1128,10 +1140,10 @@
mlog_entry_void();
mlog(0, "inode %"MLFu64" take %s DATA lock\n",
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
write ? "EXMODE" : "PRMODE");
- lockres = &OCFS_I(inode)->ip_data_lockres;
+ lockres = &OCFS2_I(inode)->ip_data_lockres;
level = write ? LKM_EXMODE : LKM_PRMODE;
@@ -1179,12 +1191,12 @@
int write)
{
int level = write ? LKM_EXMODE : LKM_PRMODE;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_data_lockres;
+ ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_data_lockres;
mlog_entry_void();
mlog(0, "inode %"MLFu64" drop %s DATA lock\n",
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
write ? "EXMODE" : "PRMODE");
ocfs2_cluster_unlock(OCFS2_SB(inode->i_sb), lockres, level);
@@ -1215,13 +1227,12 @@
* date from the truncate code. */
static void __ocfs2_stuff_meta_lvb(struct inode *inode)
{
- ocfs_inode_private *oip = OCFS_I(inode);
- ocfs2_lock_res *lockres = &oip->ip_meta_lockres;
+ ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
mlog_entry_void();
- lvb->lvb_iclusters = cpu_to_be32(oip->ip_clusters);
+ lvb->lvb_iclusters = cpu_to_be32(OCFS2_I(inode)->ip_clusters);
lvb->lvb_iuid = cpu_to_be32(inode->i_uid);
lvb->lvb_igid = cpu_to_be32(inode->i_gid);
lvb->lvb_isize = cpu_to_be64(i_size_read(inode));
@@ -1243,8 +1254,7 @@
static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
{
- ocfs_inode_private *oip = OCFS_I(inode);
- ocfs2_lock_res *lockres = &oip->ip_meta_lockres;
+ ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
mlog_entry_void();
@@ -1261,37 +1271,37 @@
be64_to_cpu(lvb->lvb_ictime), be64_to_cpu(lvb->lvb_imtime));
/* We're safe here without the lockres lock... */
- spin_lock(&oip->ip_lock);
- oip->ip_clusters = be32_to_cpu(lvb->lvb_iclusters);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_clusters = be32_to_cpu(lvb->lvb_iclusters);
inode->i_uid = be32_to_cpu(lvb->lvb_iuid);
inode->i_gid = be32_to_cpu(lvb->lvb_igid);
i_size_write(inode, be64_to_cpu(lvb->lvb_isize));
inode->i_mode = be16_to_cpu(lvb->lvb_imode);
inode->i_nlink = be16_to_cpu(lvb->lvb_inlink);
/* fast-symlinks are a special case */
- if (S_ISLNK(inode->i_mode) && !oip->ip_clusters)
+ if (S_ISLNK(inode->i_mode) && !OCFS2_I(inode)->ip_clusters)
inode->i_blocks = 0;
else
inode->i_blocks = ocfs2_align_bytes_to_sectors(i_size_read(inode));
ocfs2_unpack_timespec(&inode->i_atime, be64_to_cpu(lvb->lvb_iatime));
ocfs2_unpack_timespec(&inode->i_mtime, be64_to_cpu(lvb->lvb_imtime));
ocfs2_unpack_timespec(&inode->i_ctime, be64_to_cpu(lvb->lvb_ictime));
- spin_unlock(&oip->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
mlog_exit_void();
}
static void ocfs2_reset_meta_lvb_values(struct inode *inode)
{
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
+ ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
u32 i_clusters;
mlog_entry_void();
- spin_lock(&OCFS_I(inode)->ip_lock);
- i_clusters = OCFS_I(inode)->ip_clusters;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ i_clusters = OCFS2_I(inode)->ip_clusters;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
spin_lock(&lockres->l_lock);
if (lockres->l_level == LKM_EXMODE)
@@ -1392,14 +1402,16 @@
mlog_entry_void();
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
if (INODE_DELETED(inode))
- mlog(ML_ERROR, "Orphaned inode %"MLFu64"was deleted while we "
+ mlog(ML_ERROR,
+ "Orphaned inode %"MLFu64"was deleted while we "
"were waiting on a lock. ip_flags = 0x%x\n",
- OCFS_I(inode)->ip_blkno, OCFS_I(inode)->ip_flags);
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_flags);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
- lockres = &OCFS_I(inode)->ip_meta_lockres;
+ lockres = &OCFS2_I(inode)->ip_meta_lockres;
if (!ocfs2_should_refresh_lock_res(lockres))
goto bail;
@@ -1413,7 +1425,7 @@
/* Boo, we have to go to disk. */
/* read bh, cast, ocfs_refresh_inode */
status = ocfs_read_block(OCFS2_SB(inode->i_sb),
- OCFS_I(inode)->ip_blkno, bh,
+ OCFS2_I(inode)->ip_blkno, bh,
OCFS_BH_CACHED, inode);
if (status < 0) {
mlog_errno(status);
@@ -1428,19 +1440,19 @@
le32_to_cpu(fe->i_generation),
"Invalid dinode %"MLFu64" disk generation: %u "
"inode->i_generation: %u\n",
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
le32_to_cpu(fe->i_generation),
inode->i_generation);
mlog_bug_on_msg(fe->i_dtime || !(fe->i_flags & OCFS2_VALID_FL),
"Stale dinode %"MLFu64" dtime: %"MLFu64" "
- "flags: 0x%x\n", OCFS_I(inode)->ip_blkno,
+ "flags: 0x%x\n", OCFS2_I(inode)->ip_blkno,
fe->i_dtime, fe->i_flags);
ocfs_refresh_inode(inode, fe);
}
mlog(0, "inode %"MLFu64", I can only trust %u clusters\n",
- OCFS_I(inode)->ip_blkno, trustable_clusters);
+ OCFS2_I(inode)->ip_blkno, trustable_clusters);
/* will do nothing for inode types that don't use the extent
* map (directories, bitmap files, etc) */
@@ -1473,7 +1485,7 @@
}
status = ocfs_read_block(OCFS2_SB(inode->i_sb),
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
ret_bh,
OCFS_BH_CACHED,
inode);
@@ -1505,7 +1517,7 @@
mlog_entry_void();
mlog(0, "inode %"MLFu64", take %s META lock\n",
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
ex ? "EXMODE" : "PRMODE");
status = 0;
@@ -1519,7 +1531,7 @@
return status;
}
- lockres = &OCFS_I(inode)->ip_meta_lockres;
+ lockres = &OCFS2_I(inode)->ip_meta_lockres;
level = ex ? LKM_EXMODE : LKM_PRMODE;
dlm_flags = 0;
if (flags & OCFS2_META_LOCK_NOQUEUE)
@@ -1584,12 +1596,12 @@
int ex)
{
int level = ex ? LKM_EXMODE : LKM_PRMODE;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
+ ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
mlog_entry_void();
mlog(0, "inode %"MLFu64" drop %s META lock\n",
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
ex ? "EXMODE" : "PRMODE");
ocfs2_cluster_unlock(OCFS2_SB(inode->i_sb), lockres, level);
@@ -1867,7 +1879,7 @@
mlog_entry_void();
err = ocfs2_drop_lock(OCFS2_SB(inode->i_sb),
- &OCFS_I(inode)->ip_data_lockres,
+ &OCFS2_I(inode)->ip_data_lockres,
NULL);
if (err < 0)
mlog_errno(err);
@@ -1875,7 +1887,7 @@
status = err;
err = ocfs2_drop_lock(OCFS2_SB(inode->i_sb),
- &OCFS_I(inode)->ip_meta_lockres,
+ &OCFS2_I(inode)->ip_meta_lockres,
&meta_dcb);
if (err < 0)
mlog_errno(err);
@@ -2021,7 +2033,7 @@
mlog_entry_void();
- lockres = &OCFS_I(inode)->ip_meta_lockres;
+ lockres = &OCFS2_I(inode)->ip_meta_lockres;
spin_lock(&lockres->l_lock);
@@ -2186,7 +2198,7 @@
if (filemap_fdatawrite(mapping)) {
mlog(ML_ERROR, "Could not sync inode %"MLFu64" for downconvert!",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
}
sync_mapping_buffers(mapping);
if (blocking == LKM_EXMODE) {
@@ -2218,7 +2230,7 @@
inode = ocfs2_lock_res_inode(lockres);
osb = OCFS2_SB(inode->i_sb);
- mlog(0, "unblock inode %"MLFu64"\n", OCFS_I(inode)->ip_blkno);
+ mlog(0, "unblock inode %"MLFu64"\n", OCFS2_I(inode)->ip_blkno);
status = ocfs2_generic_unblock_lock(osb,
lockres,
@@ -2228,7 +2240,7 @@
mlog_errno(status);
mlog(0, "inode %"MLFu64", requeue = %d\n",
- OCFS_I(inode)->ip_blkno, *requeue);
+ OCFS2_I(inode)->ip_blkno, *requeue);
/* because of inode ref counting, we never want to propagate
* up requeue requests for inode locks. Instead we do it
@@ -2254,14 +2266,14 @@
inode = ocfs2_lock_res_inode(lockres);
- mlog(0, "unblock inode %"MLFu64"\n", OCFS_I(inode)->ip_blkno);
+ mlog(0, "unblock inode %"MLFu64"\n", OCFS2_I(inode)->ip_blkno);
status = ocfs2_do_unblock_meta(inode, requeue);
if (status < 0)
mlog_errno(status);
mlog(0, "inode %"MLFu64", requeue = %d\n",
- OCFS_I(inode)->ip_blkno, *requeue);
+ OCFS2_I(inode)->ip_blkno, *requeue);
/* if you're confused by this, see the comment in
* ocfs2_unblock_data */
@@ -2347,7 +2359,7 @@
if (!igrab(inode)) {
mlog(0, "Inode %"MLFu64" asked to be scheduled during "
- "clear_inode!\n", OCFS_I(inode)->ip_blkno);
+ "clear_inode!\n", OCFS2_I(inode)->ip_blkno);
return;
}
@@ -2355,3 +2367,19 @@
mlog_exit_void();
}
+
+void ocfs2_meta_lvb_set_trunc_clusters(struct inode *inode,
+ unsigned int trunc_clusters)
+{
+ ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
+ ocfs2_meta_lvb *lvb;
+
+ spin_lock(&lockres->l_lock);
+ OCFS_ASSERT(lockres->l_level == LKM_EXMODE);
+
+ lvb = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
+ if (be32_to_cpu(lvb->lvb_trunc_clusters) > trunc_clusters)
+ lvb->lvb_trunc_clusters = cpu_to_be32(trunc_clusters);
+ spin_unlock(&lockres->l_lock);
+}
+
Modified: trunk/fs/ocfs2/dlmglue.h
===================================================================
--- trunk/fs/ocfs2/dlmglue.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/dlmglue.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -79,6 +79,7 @@
int ocfs2_dlm_init(ocfs_super *osb);
void ocfs2_dlm_shutdown(ocfs_super *osb);
+void ocfs2_lock_res_init_once(ocfs2_lock_res *res);
int ocfs2_inode_lock_res_init(ocfs2_lock_res *res,
enum ocfs2_lock_type type,
struct inode *inode);
@@ -115,19 +116,8 @@
void ocfs2_process_blocked_lock(ocfs_super *osb,
ocfs2_lock_res *lockres);
-static inline void ocfs2_meta_lvb_set_trunc_clusters(struct inode *inode,
- unsigned int trunc_clusters)
-{
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
- ocfs2_meta_lvb *lvb;
+void ocfs2_meta_lvb_set_trunc_clusters(struct inode *inode,
+ unsigned int trunc_clusters);
+void ocfs2_init_inode_seq(struct inode *inode);
- spin_lock(&lockres->l_lock);
- OCFS_ASSERT(lockres->l_level == LKM_EXMODE);
-
- lvb = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
- if (be32_to_cpu(lvb->lvb_trunc_clusters) > trunc_clusters)
- lvb->lvb_trunc_clusters = cpu_to_be32(trunc_clusters);
- spin_unlock(&lockres->l_lock);
-}
-
#endif /* DLMGLUE_H */
Modified: trunk/fs/ocfs2/extent_map.c
===================================================================
--- trunk/fs/ocfs2/extent_map.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/extent_map.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -39,6 +39,7 @@
#include "ocfs2.h"
#include "extent_map.h"
+#include "inode.h"
#include "buffer_head_io.h"
@@ -163,7 +164,7 @@
ret = -EBADR;
if ((rec->e_cpos + rec->e_clusters) >
- OCFS_I(inode)->ip_clusters)
+ OCFS2_I(inode)->ip_clusters)
goto out_free;
if ((rec->e_cpos + rec->e_clusters) <= cpos) {
@@ -261,23 +262,23 @@
{
int ret;
u64 blkno;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *ent;
struct buffer_head *bh = NULL;
ocfs2_extent_block *eb;
ocfs2_dinode *di;
ocfs2_extent_list *el;
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
ent = ocfs2_extent_map_lookup(em, cpos, clusters, NULL, NULL);
if (ent) {
if (!ent->e_tree_depth) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
*ret_ent = ent;
return 0;
}
blkno = ent->e_rec.e_blkno;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
ret = ocfs_read_block(OCFS2_SB(inode->i_sb), blkno, &bh,
OCFS_BH_CACHED, inode);
@@ -290,10 +291,10 @@
OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
el = &eb->h_list;
} else {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
ret = ocfs_read_block(OCFS2_SB(inode->i_sb),
- OCFS_I(inode)->ip_blkno, &bh,
+ OCFS2_I(inode)->ip_blkno, &bh,
OCFS_BH_CACHED, inode);
if (ret) {
if (bh)
@@ -355,14 +356,14 @@
struct ocfs2_em_insert_context *ctxt)
{
int ret;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *old_ent;
ctxt->need_left = 0;
ctxt->need_right = 0;
ctxt->old_ent = NULL;
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
ret = ocfs2_extent_map_insert_entry(em, ctxt->new_ent);
if (!ret) {
ctxt->new_ent = NULL;
@@ -448,7 +449,7 @@
ctxt->new_ent = NULL;
out_unlock:
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
return ret;
}
@@ -461,13 +462,13 @@
struct ocfs2_em_insert_context ctxt = {0, };
if ((rec->e_cpos + rec->e_clusters) >
- OCFS_I(inode)->ip_map.em_clusters)
+ OCFS2_I(inode)->ip_map.em_clusters)
return -EBADR;
/* Zero e_clusters means a truncated tail record. It better be EOF */
if (!rec->e_clusters) {
if ((rec->e_cpos + rec->e_clusters) !=
- OCFS_I(inode)->ip_map.em_clusters)
+ OCFS2_I(inode)->ip_map.em_clusters)
return -EBADR;
/* Ignore the truncated tail */
@@ -541,25 +542,33 @@
u32 new_clusters)
{
int ret;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *ent;
ocfs2_extent_rec *old;
OCFS_ASSERT(new_clusters);
OCFS_ASSERT(rec->e_clusters >= new_clusters);
- if (em->em_clusters < OCFS_I(inode)->ip_clusters) {
+ if (em->em_clusters < OCFS2_I(inode)->ip_clusters) {
/*
* Size changed underneath us on disk. Drop any
* straddling records and update our idea of
* i_clusters
*/
ocfs2_extent_map_drop(inode, em->em_clusters - 1);
- em->em_clusters = OCFS_I(inode)->ip_clusters;
+ em->em_clusters = OCFS2_I(inode)->ip_clusters;
}
- OCFS_ASSERT((rec->e_cpos + rec->e_clusters) ==
- (em->em_clusters + new_clusters));
+ mlog_bug_on_msg((rec->e_cpos + rec->e_clusters) !=
+ (em->em_clusters + new_clusters),
+ "Inode %"MLFu64":\n"
+ "rec->e_cpos = %u + rec->e_clusters = %u = %u\n"
+ "em->em_clusters = %u + new_clusters = %u = %u\n",
+ OCFS2_I(inode)->ip_blkno,
+ rec->e_cpos, rec->e_clusters,
+ rec->e_cpos + rec->e_clusters,
+ em->em_clusters, new_clusters,
+ em->em_clusters + new_clusters);
em->em_clusters += new_clusters;
@@ -614,12 +623,12 @@
int *tree_depth)
{
int ret = -ENOENT;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *ent;
*rec = NULL;
- if (cpos >= OCFS_I(inode)->ip_clusters)
+ if (cpos >= OCFS2_I(inode)->ip_clusters)
return -EINVAL;
if (cpos >= em->em_clusters) {
@@ -629,10 +638,10 @@
* i_clusters
*/
ocfs2_extent_map_drop(inode, em->em_clusters - 1);
- em->em_clusters = OCFS_I(inode)->ip_clusters ;
+ em->em_clusters = OCFS2_I(inode)->ip_clusters ;
}
- ent = ocfs2_extent_map_lookup(&OCFS_I(inode)->ip_map, cpos, 1,
+ ent = ocfs2_extent_map_lookup(&OCFS2_I(inode)->ip_map, cpos, 1,
NULL, NULL);
if (ent) {
@@ -651,12 +660,12 @@
{
int ret;
u32 coff, ccount;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *ent = NULL;
*p_cpos = ccount = 0;
- if ((v_cpos + count) > OCFS_I(inode)->ip_clusters)
+ if ((v_cpos + count) > OCFS2_I(inode)->ip_clusters)
return -EINVAL;
if ((v_cpos + count) > em->em_clusters) {
@@ -666,7 +675,7 @@
* i_clusters
*/
ocfs2_extent_map_drop(inode, em->em_clusters - 1);
- em->em_clusters = OCFS_I(inode)->ip_clusters;
+ em->em_clusters = OCFS2_I(inode)->ip_clusters;
}
@@ -705,7 +714,7 @@
u32 cpos, clusters;
int bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1);
struct ocfs2_extent_map_entry *ent = NULL;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
ocfs2_extent_rec *rec;
*p_blkno = 0;
@@ -713,7 +722,7 @@
cpos = ocfs2_blocks_to_clusters(inode->i_sb, v_blkno);
clusters = ocfs2_blocks_to_clusters(inode->i_sb,
(u64)count + bpc - 1);
- if ((cpos + clusters) > OCFS_I(inode)->ip_clusters)
+ if ((cpos + clusters) > OCFS2_I(inode)->ip_clusters)
return -EINVAL;
if ((cpos + clusters) > em->em_clusters) {
@@ -723,7 +732,7 @@
* i_clusters
*/
ocfs2_extent_map_drop(inode, em->em_clusters - 1);
- em->em_clusters = OCFS_I(inode)->ip_clusters;
+ em->em_clusters = OCFS2_I(inode)->ip_clusters;
}
ret = ocfs2_extent_map_lookup_read(inode, cpos, clusters, &ent);
@@ -758,7 +767,7 @@
int ocfs2_extent_map_init(struct inode *inode)
{
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
em->em_extents = RB_ROOT;
em->em_clusters = 0;
@@ -773,7 +782,7 @@
struct ocfs2_extent_map_entry **tail_ent)
{
struct rb_node *node, *next;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *ent;
*free_head = NULL;
@@ -836,10 +845,10 @@
int ocfs2_extent_map_drop(struct inode *inode, u32 new_clusters)
{
struct rb_node *free_head = NULL;
- struct ocfs2_extent_map *em = &OCFS_I(inode)->ip_map;
+ struct ocfs2_extent_map *em = &OCFS2_I(inode)->ip_map;
struct ocfs2_extent_map_entry *ent;
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
__ocfs2_extent_map_drop(inode, new_clusters, &free_head, &ent);
@@ -849,7 +858,7 @@
free_head = &ent->e_node;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
if (free_head)
__ocfs2_extent_map_drop_cleanup(free_head);
@@ -867,7 +876,7 @@
struct rb_node *free_head = NULL;
struct ocfs2_extent_map_entry *ent = NULL;
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
__ocfs2_extent_map_drop(inode, new_clusters, &free_head, &ent);
@@ -875,9 +884,9 @@
ent->e_rec.e_clusters =
new_clusters - ent->e_rec.e_cpos;
- OCFS_I(inode)->ip_map.em_clusters = new_clusters;
+ OCFS2_I(inode)->ip_map.em_clusters = new_clusters;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
if (free_head)
__ocfs2_extent_map_drop_cleanup(free_head);
Modified: trunk/fs/ocfs2/file.c
===================================================================
--- trunk/fs/ocfs2/file.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/file.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -88,7 +88,7 @@
{
int status;
int mode = file->f_flags;
- ocfs_inode_private *oip = OCFS_I(inode);
+ struct ocfs2_inode_info *oi = OCFS2_I(inode);
mlog_entry ("(0x%p, 0x%p, '%.*s')\n", inode, file,
file->f_dentry->d_name.len,
@@ -96,19 +96,19 @@
status = -EACCES;
- spin_lock(&oip->ip_lock);
- if (oip->ip_open_cnt &&
+ spin_lock(&oi->ip_lock);
+ if (oi->ip_open_count &&
!ocfs2_valid_open(mode,
- oip->ip_flags & OCFS_INODE_OPEN_DIRECT)) {
- spin_unlock(&oip->ip_lock);
+ oi->ip_flags & OCFS2_INODE_OPEN_DIRECT)) {
+ spin_unlock(&oi->ip_lock);
goto leave;
}
if (mode & O_DIRECT)
- oip->ip_flags |= OCFS_INODE_OPEN_DIRECT;
+ oi->ip_flags |= OCFS2_INODE_OPEN_DIRECT;
- oip->ip_open_cnt++;
- spin_unlock(&oip->ip_lock);
+ oi->ip_open_count++;
+ spin_unlock(&oi->ip_lock);
status = 0;
leave:
mlog_exit(status);
@@ -117,16 +117,16 @@
static int ocfs_file_release(struct inode *inode, struct file *file)
{
- ocfs_inode_private *oip = OCFS_I(inode);
+ struct ocfs2_inode_info *oi = OCFS2_I(inode);
mlog_entry("(0x%p, 0x%p, '%.*s')\n", inode, file,
file->f_dentry->d_name.len,
file->f_dentry->d_name.name);
- spin_lock(&oip->ip_lock);
- if (!--oip->ip_open_cnt)
- oip->ip_flags &= ~OCFS_INODE_OPEN_DIRECT;
- spin_unlock(&oip->ip_lock);
+ spin_lock(&oi->ip_lock);
+ if (!--oi->ip_open_count)
+ oi->ip_flags &= ~OCFS2_INODE_OPEN_DIRECT;
+ spin_unlock(&oi->ip_lock);
mlog_exit(0);
@@ -172,7 +172,7 @@
unsigned should_zero)
{
mlog(0, "inode %"MLFu64", newsize = %lld, should_zero = %u\n",
- OCFS_I(inode)->ip_blkno, (long long)newsize, should_zero);
+ OCFS2_I(inode)->ip_blkno, (long long)newsize, should_zero);
ocfs2_update_inode_size(inode, newsize);
@@ -181,7 +181,7 @@
* This leaves dirty data in holes.
* Caveat Emptor.
*/
- OCFS_I(inode)->ip_mmu_private = newsize;
+ OCFS2_I(inode)->ip_mmu_private = newsize;
} else {
int status = ocfs2_zero_extend(inode);
/*
@@ -238,7 +238,7 @@
if (ret)
goto bail;
- down_read(&OCFS_I(inode)->ip_alloc_sem);
+ down_read(&OCFS2_I(inode)->ip_alloc_sem);
#ifdef OCFS2_ORACORE_WORKAROUNDS
saved_flags = filp->f_flags;
@@ -252,7 +252,7 @@
filp->f_flags = saved_flags;
#endif
- up_read(&OCFS_I(inode)->ip_alloc_sem);
+ up_read(&OCFS2_I(inode)->ip_alloc_sem);
bail:
/* we might have to finish up extentions that were performed before
@@ -323,11 +323,11 @@
goto bail_unlock;
}
- down_read(&OCFS_I(inode)->ip_alloc_sem);
+ down_read(&OCFS2_I(inode)->ip_alloc_sem);
ret = generic_file_read (filp, buf, count, ppos);
- up_read(&OCFS_I(inode)->ip_alloc_sem);
+ up_read(&OCFS2_I(inode)->ip_alloc_sem);
if (ret == -EINVAL)
mlog(ML_ERROR, "Generic_file_read returned -EINVAL\n");
@@ -364,7 +364,6 @@
u64 new_i_size)
{
int status, grow;
- ocfs_inode_private *oip = OCFS_I(inode);
mlog_entry_void();
@@ -380,10 +379,10 @@
}
/* FIXME: I think this should all be in the caller */
- spin_lock(&oip->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
if (!grow)
- oip->ip_mmu_private = i_size_read(inode);
- spin_unlock(&oip->ip_lock);
+ OCFS2_I(inode)->ip_mmu_private = i_size_read(inode);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
bail:
mlog_exit(status);
@@ -437,11 +436,11 @@
ocfs2_truncate_context *tc = NULL;
mlog_entry("(inode = %"MLFu64", new_i_size = %"MLFu64"\n",
- OCFS_I(inode)->ip_blkno, new_i_size);
+ OCFS2_I(inode)->ip_blkno, new_i_size);
truncate_inode_pages(inode->i_mapping, new_i_size);
- status = ocfs_read_block(osb, OCFS_I(inode)->ip_blkno, &fe_bh,
+ status = ocfs_read_block(osb, OCFS2_I(inode)->ip_blkno, &fe_bh,
OCFS_BH_CACHED, inode);
if (status < 0) {
mlog_errno(status);
@@ -544,7 +543,7 @@
int res = 0;
/* Start the zeroing of blocks */
- if (i_size_read(inode) > OCFS_I(inode)->ip_mmu_private) {
+ if (i_size_read(inode) > OCFS2_I(inode)->ip_mmu_private) {
page = grab_cache_page(mapping,
size >> PAGE_CACHE_SHIFT);
if (!page) {
@@ -646,7 +645,7 @@
block = ocfs2_clusters_to_blocks(osb->sb, bit_off);
mlog(0, "Allocating %u clusters at block %u for inode %"MLFu64"\n",
- num_bits, bit_off, OCFS_I(inode)->ip_blkno);
+ num_bits, bit_off, OCFS2_I(inode)->ip_blkno);
status = ocfs2_insert_extent(osb, handle, inode, fe_bh, block,
num_bits, meta_ac);
if (status < 0) {
@@ -655,9 +654,9 @@
}
fe->i_clusters += num_bits;
- spin_lock(&OCFS_I(inode)->ip_lock);
- OCFS_I(inode)->ip_clusters = fe->i_clusters;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_clusters = fe->i_clusters;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
status = ocfs_journal_dirty(handle, fe_bh);
if (status < 0) {
@@ -723,7 +722,7 @@
goto leave;
}
- status = ocfs_read_block(osb, OCFS_I(inode)->ip_blkno, &bh,
+ status = ocfs_read_block(osb, OCFS2_I(inode)->ip_blkno, &bh,
OCFS_BH_CACHED, inode);
if (status < 0) {
mlog_errno(status);
@@ -743,7 +742,7 @@
mlog(0, "extend inode %"MLFu64", new_i_size = %"MLFu64", "
"i_size = %lld, fe->i_clusters = %u, clusters_to_add = %u\n",
- OCFS_I(inode)->ip_blkno, new_i_size, i_size_read(inode),
+ OCFS2_I(inode)->ip_blkno, new_i_size, i_size_read(inode),
fe->i_clusters, clusters_to_add);
if (!clusters_to_add)
@@ -784,7 +783,7 @@
* until we're done changing it. We depend on i_sem to block
* other extend/truncate calls while we're here. Ordering wrt
* start_trans is important here -- always do it before! */
- down_write(&OCFS_I(inode)->ip_alloc_sem);
+ down_write(&OCFS2_I(inode)->ip_alloc_sem);
drop_alloc_sem = 1;
do_start_trans:
credits = ocfs_calc_extend_credits(osb->sb, fe, clusters_to_add);
@@ -888,7 +887,7 @@
fe->i_clusters, fe->i_size);
mlog(0, "inode: ip_clusters=%u, i_size=%lld\n",
- OCFS_I(inode)->ip_clusters, i_size_read(inode));
+ OCFS2_I(inode)->ip_clusters, i_size_read(inode));
fe->i_ctime = fe->i_mtime = CURRENT_TIME.tv_sec;
fe->i_ctime_nsec = fe->i_mtime_nsec = cpu_to_le32(CURRENT_TIME.tv_nsec);
@@ -901,7 +900,7 @@
leave:
if (drop_alloc_sem) {
- up_write(&OCFS_I(inode)->ip_alloc_sem);
+ up_write(&OCFS2_I(inode)->ip_alloc_sem);
drop_alloc_sem = 0;
}
if (handle) {
@@ -999,20 +998,22 @@
&& status != -ENOSPC
&& status != -EINTR
&& status != -ERESTARTSYS)
- mlog(ML_ERROR, "status return of %d extending inode "
- "%"MLFu64"\n", status, OCFS_I(inode)->ip_blkno);
+ mlog(ML_ERROR,
+ "status return of %d extending inode "
+ "%"MLFu64"\n", status,
+ OCFS2_I(inode)->ip_blkno);
status = 0;
newsize = bytes_added + i_size_read(inode);
if (bytes_added)
ocfs2_update_inode_size(inode, newsize);
- spin_lock(&OCFS_I(inode)->ip_lock);
- if (OCFS_I(inode)->ip_flags & OCFS_INODE_OPEN_DIRECT) {
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_OPEN_DIRECT) {
/* This is a total broken hack for O_DIRECT crack */
- OCFS_I(inode)->ip_mmu_private = i_size_read(inode);
+ OCFS2_I(inode)->ip_mmu_private = i_size_read(inode);
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
status = ocfs2_zero_extend(inode);
if (status < 0) {
mlog_errno(status);
Modified: trunk/fs/ocfs2/heartbeat.c
===================================================================
--- trunk/fs/ocfs2/heartbeat.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/heartbeat.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -41,6 +41,7 @@
#include "alloc.h"
#include "heartbeat.h"
+#include "inode.h"
#include "journal.h"
#include "vote.h"
Modified: trunk/fs/ocfs2/inode.c
===================================================================
--- trunk/fs/ocfs2/inode.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/inode.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -55,17 +55,16 @@
extern struct address_space_operations ocfs_aops;
-typedef struct _ocfs_find_inode_args
+struct ocfs2_find_inode_args
{
u64 blkno;
unsigned long ino;
u32 flags;
-}
-ocfs_find_inode_args;
+};
-static int ocfs_read_locked_inode(struct inode *inode, ocfs_find_inode_args *args);
+static int ocfs_read_locked_inode(struct inode *inode, struct ocfs2_find_inode_args *args);
static int ocfs_init_locked_inode(struct inode * inode, void * opaque);
-static int ocfs_find_actor (struct inode *inode, void *opaque);
+static int ocfs2_find_actor (struct inode *inode, void *opaque);
static int ocfs_truncate_for_delete(ocfs_super *osb,
struct inode *inode,
struct buffer_head *fe_bh);
@@ -76,12 +75,12 @@
*/
struct inode *ocfs_ilookup(ocfs_super *osb, u64 blkno)
{
- ocfs_find_inode_args args;
+ struct ocfs2_find_inode_args args;
args.blkno = blkno;
args.flags = 0;
args.ino = ino_from_blkno(osb->sb, blkno);
- return ilookup5(osb->sb, args.ino, ocfs_find_actor, &args);
+ return ilookup5(osb->sb, args.ino, ocfs2_find_actor, &args);
}
/*
@@ -92,7 +91,7 @@
{
struct inode *inode = NULL;
struct super_block *sb = osb->sb;
- ocfs_find_inode_args args;
+ struct ocfs2_find_inode_args args;
u32 flags = 0;
mlog_entry("(blkno = %"MLFu64")\n", blkno);
@@ -109,7 +108,7 @@
args.flags = flags;
args.ino = ino_from_blkno(sb, blkno);
- inode = iget5_locked (sb, args.ino, ocfs_find_actor,
+ inode = iget5_locked (sb, args.ino, ocfs2_find_actor,
ocfs_init_locked_inode, &args);
/* inode was *not* in the inode cache. 2.6.x requires
* us to do our own read_inode call and unlock it
@@ -134,7 +133,7 @@
bail:
if (inode)
mlog(0, "returning inode with number %"MLFu64"\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
mlog_exit_ptr(inode);
@@ -149,30 +148,18 @@
* not found? : get_new_inode -> OCFS_INIT_LOCKED_INODE
*/
-static int ocfs_find_actor(struct inode *inode, void *opaque)
+static int ocfs2_find_actor(struct inode *inode, void *opaque)
{
- ocfs_find_inode_args *args = NULL;
+ struct ocfs2_find_inode_args *args = NULL;
int ret = 0;
mlog_entry ("(0x%p, %lu, 0x%p)\n", inode, inode->i_ino, opaque);
args = opaque;
- /* XXX: Can this actually ever be passed in as NULL? */
- if (inode == NULL)
- goto bail;
+ mlog_bug_on_msg(!inode, "No inode in find actor!\n");
- if (!inode->u.generic_ip) {
- mlog(ML_ERROR, "inode %lu has no generic_ip (is_bad_inode = "
- "%d)!\n", inode->i_ino, is_bad_inode(inode));
- if (args)
- mlog(ML_ERROR, "args-blkno = %"MLFu64", "
- "args->ino = %lu, args->flags = 0x%x\n",
- args->blkno, args->ino, args->flags);
- BUG();
- }
-
- if (OCFS_I(inode)->ip_blkno != args->blkno)
+ if (OCFS2_I(inode)->ip_blkno != args->blkno)
goto bail;
ret = 1;
@@ -188,57 +175,18 @@
*/
static int ocfs_init_locked_inode(struct inode * inode, void * opaque)
{
- ocfs_find_inode_args *args = opaque;
+ struct ocfs2_find_inode_args *args = opaque;
+
mlog_entry("inode = %p, opaque = %p\n", inode, opaque);
inode->i_ino = args->ino;
+ OCFS2_I(inode)->ip_blkno = args->blkno;
mlog_exit(0);
return 0;
}
/*
- * ocfs_inode_init_private()
- *
- */
-int ocfs_inode_init_private(struct inode *inode)
-{
- ocfs_inode_private *i;
-
- if (!inode)
- BUG();
-
- inode->u.generic_ip = kmem_cache_alloc(ocfs2_inode_cache, GFP_NOFS);
-
- if (!inode->u.generic_ip)
- return -ENOMEM;
-
- i = inode->u.generic_ip;
- memset(i, 0, sizeof(ocfs_inode_private));
-
- i->ip_flags = 0;
- atomic_set(&i->ip_clean_buffer_seq, 0);
- i->ip_open_cnt = 0;
- spin_lock_init(&i->ip_lock);
- ocfs2_extent_map_init(inode);
- INIT_LIST_HEAD(&i->ip_handle_list);
- INIT_LIST_HEAD(&i->ip_io_markers);
- i->ip_handle = NULL;
- i->ip_next_orphan = NULL;
-
- init_rwsem(&i->ip_alloc_sem);
- init_MUTEX(&(i->ip_io_sem));
-
- /* These should be set in read_inode2. */
- i->ip_clusters = 0;
- i->ip_blkno = 0ULL;
- i->ip_mmu_private = 0LL;
-
- i->ip_flags |= OCFS_INODE_INITIALIZED;
- return 0;
-} /* ocfs_inode_init_private */
-
-/*
* ocfs_populate_inode()
*
*/
@@ -272,12 +220,6 @@
goto bail;
}
- if (!inode->u.generic_ip && ocfs_inode_init_private(inode)) {
- /* How can we recover gracefully? */
- mlog(ML_ERROR, "unable to allocate private data for inode\n");
- goto bail;
- }
-
inode->i_version = 1;
inode->i_generation = le32_to_cpu(fe->i_generation);
inode->i_rdev = huge_decode_dev(le64_to_cpu(fe->id1.dev1.i_rdev));
@@ -300,11 +242,13 @@
inode->i_ctime.tv_sec = fe->i_ctime;
inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
- OCFS_I(inode)->ip_blkno = fe->i_blkno;
+ if (OCFS2_I(inode)->ip_blkno != fe->i_blkno)
+ mlog(ML_ERROR,
+ "ip_blkno %"MLFu64" != i_blkno %"MLFu64"!\n",
+ OCFS2_I(inode)->ip_blkno, fe->i_blkno);
- OCFS_I(inode)->ip_clusters = fe->i_clusters;
- OCFS_I(inode)->ip_inode = inode;
- OCFS_I(inode)->ip_orphaned_slot = OCFS_INVALID_NODE_NUM;
+ OCFS2_I(inode)->ip_clusters = fe->i_clusters;
+ OCFS2_I(inode)->ip_orphaned_slot = OCFS_INVALID_NODE_NUM;
if (create_ino)
inode->i_ino = ino_from_blkno(inode->i_sb, fe->i_blkno);
@@ -315,10 +259,10 @@
inode->i_nlink = fe->i_links_count;
if (fe->i_flags & OCFS2_LOCAL_ALLOC_FL) {
- OCFS_I(inode)->ip_flags |= OCFS_INODE_BITMAP;
+ OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
mlog(0, "local alloc inode: i_ino=%lu\n", inode->i_ino);
} else if (fe->i_flags & OCFS2_BITMAP_FL) {
- OCFS_I(inode)->ip_flags |= OCFS_INODE_BITMAP;
+ OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
} else if (fe->i_flags & OCFS2_SUPER_BLOCK_FL) {
mlog(0, "superblock inode: i_ino=%lu\n", inode->i_ino);
// we can't actually hit this as read_inode can't handle
@@ -328,20 +272,20 @@
switch (inode->i_mode & S_IFMT) {
case S_IFREG:
- atomic_set(GET_INODE_CLEAN_SEQ(inode), atomic_read(&osb->clean_buffer_seq));
+ ocfs2_init_inode_seq(inode);
inode->i_fop = &ocfs_fops;
inode->i_op = &ocfs_file_iops;
i_size_write(inode, fe->i_size);
- OCFS_I(inode)->ip_mmu_private = inode->i_size;
+ OCFS2_I(inode)->ip_mmu_private = inode->i_size;
break;
case S_IFDIR:
- atomic_set(GET_INODE_CLEAN_SEQ(inode), atomic_read(&osb->clean_buffer_seq));
+ ocfs2_init_inode_seq(inode);
inode->i_op = &ocfs_dir_iops;
inode->i_fop = &ocfs_dops;
i_size_write(inode, fe->i_size);
break;
case S_IFLNK:
- atomic_set(GET_INODE_CLEAN_SEQ(inode), atomic_read(&osb->clean_buffer_seq));
+ ocfs2_init_inode_seq(inode);
if (ocfs2_inode_is_fast_symlink(inode))
inode->i_op = &ocfs_fast_symlink_inode_operations;
else
@@ -355,13 +299,13 @@
break;
}
- status = ocfs2_inode_lock_res_init(&OCFS_I(inode)->ip_meta_lockres,
+ status = ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_meta_lockres,
OCFS_TYPE_META, inode);
if (status < 0) {
mlog_errno(status);
goto bail;
}
- status = ocfs2_inode_lock_res_init(&OCFS_I(inode)->ip_data_lockres,
+ status = ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_data_lockres,
OCFS_TYPE_DATA, inode);
if (status < 0)
mlog_errno(status);
@@ -370,7 +314,7 @@
return status;
} /* ocfs_populate_inode */
-static int ocfs_read_locked_inode(struct inode *inode, ocfs_find_inode_args *args)
+static int ocfs_read_locked_inode(struct inode *inode, struct ocfs2_find_inode_args *args)
{
struct super_block *sb;
ocfs_super *osb;
@@ -429,7 +373,7 @@
BUG();
if (sysfile)
- OCFS_I(inode)->ip_flags |= OCFS_INODE_SYSTEM_FILE;
+ OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SYSTEM_FILE;
status = 0;
@@ -517,7 +461,7 @@
mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino);
- if (OCFS_I(inode)->ip_flags & OCFS_INODE_SYSTEM_FILE) {
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
mlog(0, "Skipping system file delete.\n");
goto bail;
}
@@ -527,14 +471,14 @@
goto bail;
}
- spin_lock(&OCFS_I(inode)->ip_lock);
- if (OCFS_I(inode)->ip_flags & OCFS_INODE_SKIP_DELETE) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_DELETE) {
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
mlog(0, "Skipping delete of %lu because another node "
"has done this for us.\n", inode->i_ino);
goto bail;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
/* If we're coming from process_vote we can't go into our own
* voting [hello, deadlock city!], so unforuntately we just
@@ -561,14 +505,14 @@
/* While we were waiting for the lock, another node might have
* asked to delete the inode. Recheck our flags to catch this
* race and just clear_inode instead.*/
- spin_lock(&OCFS_I(inode)->ip_lock);
- if (OCFS_I(inode)->ip_flags & OCFS_INODE_SKIP_DELETE) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SKIP_DELETE) {
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
mlog(0, "Skipping delete of %lu because another node "
"has done this for us.\n", inode->i_ino);
goto bail;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
status = ocfs2_request_delete_vote(inode);
if (status < 0) {
@@ -581,9 +525,9 @@
goto bail;
}
- spin_lock(&OCFS_I(inode)->ip_lock);
- orphaned_slot = OCFS_I(inode)->ip_orphaned_slot;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ orphaned_slot = OCFS2_I(inode)->ip_orphaned_slot;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
if (orphaned_slot == OCFS_INVALID_NODE_NUM) {
/* Nobody knew which slot this inode was orphaned
@@ -591,17 +535,17 @@
* recovery knows how to clean it up so we can safely
* ignore this inode for now on. */
mlog(0, "Nobody knew where inode %"MLFu64" was orphaned!\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
/* XXX: Is this really necessary? */
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
SET_INODE_DELETED(inode);
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
goto bail;
}
mlog(0, "Inode %"MLFu64" is ok to wipe from orphan dir slot %d\n",
- OCFS_I(inode)->ip_blkno, orphaned_slot);
+ OCFS2_I(inode)->ip_blkno, orphaned_slot);
fe = (ocfs2_dinode *) fe_bh->b_data;
if (!(fe->i_flags & OCFS2_ORPHANED_FL)) {
@@ -729,13 +673,13 @@
} /* ocfs_delete_inode */
/*
- * ocfs_clear_inode()
+ * ocfs2_clear_inode()
*
*/
-void ocfs_clear_inode (struct inode *inode)
+void ocfs2_clear_inode(struct inode *inode)
{
int status;
- ocfs_super *osb;
+ struct ocfs2_inode_info *oi = OCFS2_I(inode);
mlog_entry_void();
@@ -743,31 +687,25 @@
goto bail;
mlog(0, "Clearing inode: %"MLFu64", nlink = %u)\n",
- OCFS_I(inode)->ip_blkno, inode->i_nlink);
+ OCFS2_I(inode)->ip_blkno, inode->i_nlink);
- osb = OCFS2_SB(inode->i_sb);
- mlog_bug_on_msg(osb == NULL,
+ mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL,
"Inode=%lu\n", inode->i_ino);
- if (!inode->u.generic_ip) {
- mlog(ML_ERROR, "inode %lu has no generic_ip!\n", inode->i_ino);
- goto bail;
- }
-
/* We very well may get a clear_inode before all an inodes
* metadata has hit disk. Of course, we can't drop any cluster
* locks until the journal has finished with it. */
if (!INODE_DELETED(inode))
ocfs2_checkpoint_inode(inode);
- if (OCFS_I(inode)->ip_blkno == -1)
+ if (oi->ip_blkno == -1)
BUG();
- OCFS_ASSERT(list_empty(&OCFS_I(inode)->ip_io_markers));
+ OCFS_ASSERT(list_empty(&oi->ip_io_markers));
/* blkno == 0 if this inode is newly created and hasn't been
* filled in yet. */
- if (OCFS_I(inode)->ip_blkno == 0) {
+ if (oi->ip_blkno == 0) {
mlog(0, "uhm, blkno = 0!\n");
goto bail;
}
@@ -778,22 +716,48 @@
if (status < 0)
mlog_errno(status);
- ocfs2_lock_res_free(&OCFS_I(inode)->ip_meta_lockres);
- ocfs2_lock_res_free(&OCFS_I(inode)->ip_data_lockres);
+ ocfs2_lock_res_free(&oi->ip_meta_lockres);
+ ocfs2_lock_res_free(&oi->ip_data_lockres);
- OCFS_I(inode)->ip_flags &= ~OCFS_INODE_INITIALIZED;
+ mlog_bug_on_msg(spin_is_locked(&oi->ip_lock),
+ "Clear inode of %"MLFu64", inode is locked\n",
+ oi->ip_blkno);
- /* clean out the inode private ... why?! */
- memset(inode->u.generic_ip, 0, sizeof(ocfs_inode_private));
+ mlog_bug_on_msg(down_trylock(&oi->ip_io_sem),
+ "Clear inode of %"MLFu64", io_sem is locked\n",
+ oi->ip_blkno);
+ up(&oi->ip_io_sem);
-bail:
- if (inode && inode->u.generic_ip) {
- kmem_cache_free(ocfs2_inode_cache, inode->u.generic_ip);
- inode->u.generic_ip = NULL;
- }
+ /*
+ * down_trylock() returns 0, down_write_trylock() returns 1
+ * kernel 1, world 0
+ */
+ mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem),
+ "Clear inode of %"MLFu64", alloc_sem is locked\n",
+ oi->ip_blkno);
+ up_write(&oi->ip_alloc_sem);
+ mlog_bug_on_msg(oi->ip_open_count,
+ "Clear inode of %"MLFu64" has open count %d\n",
+ oi->ip_blkno, oi->ip_open_count);
+ mlog_bug_on_msg(!list_empty(&oi->ip_handle_list),
+ "Clear inode of %"MLFu64" has non empty handle list\n",
+ oi->ip_blkno);
+ mlog_bug_on_msg(oi->ip_handle,
+ "Clear inode of %"MLFu64" has non empty handle pointer\n",
+ oi->ip_blkno);
+
+ atomic_set(&oi->ip_clean_buffer_seq, 0);
+ oi->ip_flags = 0;
+ oi->ip_created_trans = 0;
+ oi->ip_last_trans = 0;
+ oi->ip_dir_start_lookup = 0;
+ oi->ip_blkno = 0ULL;
+
+
+bail:
mlog_exit_void ();
-} /* ocfs_clear_inode */
+}
/*
* TODO: this should probably be merged into ocfs_get_block
@@ -861,7 +825,7 @@
ocfs_super *osb;
mlog_entry("(inode = 0x%p, ino = %"MLFu64")\n", inode,
- inode ? OCFS_I(inode)->ip_blkno : 0ULL);
+ inode ? OCFS2_I(inode)->ip_blkno : 0ULL);
if (!inode) {
mlog(0, "eep, no inode!\n");
@@ -871,14 +835,14 @@
osb = OCFS2_SB(inode->i_sb);
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
if (INODE_DELETED(inode)) {
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
mlog(0, "inode deleted!\n");
status = -ENOENT;
goto bail;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
status = ocfs2_meta_lock(inode, NULL, NULL, 0);
if (status < 0) {
@@ -906,7 +870,7 @@
int status;
ocfs2_dinode *fe = (ocfs2_dinode *) bh->b_data;
- mlog_entry("(inode %"MLFu64")\n", OCFS_I(inode)->ip_blkno);
+ mlog_entry("(inode %"MLFu64")\n", OCFS2_I(inode)->ip_blkno);
status = ocfs_journal_access(handle, inode, bh,
OCFS_JOURNAL_ACCESS_WRITE);
@@ -915,9 +879,9 @@
goto leave;
}
- spin_lock(&OCFS_I(inode)->ip_lock);
- fe->i_clusters = OCFS_I(inode)->ip_clusters;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ fe->i_clusters = OCFS2_I(inode)->ip_clusters;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
fe->i_size = (u64)i_size_read(inode);
fe->i_links_count = inode->i_nlink;
@@ -953,15 +917,14 @@
void ocfs_refresh_inode(struct inode *inode,
ocfs2_dinode *fe)
{
- ocfs_inode_private *oip = OCFS_I(inode);
ocfs_super *osb = OCFS2_SB(inode->i_sb);
- spin_lock(&oip->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
- oip->ip_clusters = fe->i_clusters;
+ OCFS2_I(inode)->ip_clusters = fe->i_clusters;
i_size_write(inode, fe->i_size);
if (S_ISREG(inode->i_mode)) {
- oip->ip_mmu_private = i_size_read(inode);
+ OCFS2_I(inode)->ip_mmu_private = i_size_read(inode);
}
inode->i_nlink = fe->i_links_count;
inode->i_uid = fe->i_uid;
@@ -979,5 +942,5 @@
inode->i_ctime.tv_sec = fe->i_ctime;
inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
- spin_unlock(&oip->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
} /* ocfs_refresh_inode */
Modified: trunk/fs/ocfs2/inode.h
===================================================================
--- trunk/fs/ocfs2/inode.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/inode.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -26,11 +26,84 @@
#ifndef OCFS2_INODE_H
#define OCFS2_INODE_H
+/* OCFS2 Inode Private Data */
+struct ocfs2_inode_info
+{
+ u64 ip_blkno;
+
+ ocfs2_lock_res ip_meta_lockres;
+ ocfs2_lock_res ip_data_lockres;
+
+ /* protects allocation changes on this inode. */
+ struct rw_semaphore ip_alloc_sem;
+
+ /* These fields are protected by ip_lock */
+ spinlock_t ip_lock;
+ u32 ip_open_count;
+ u32 ip_clusters;
+ loff_t ip_mmu_private;
+ struct ocfs2_extent_map ip_map;
+ struct list_head ip_io_markers;
+ int ip_orphaned_slot;
+
+ struct semaphore ip_io_sem;
+
+ /* Used by the journalling code to attach an inode to a
+ * handle. These are protected by ip_io_sem in order to lock
+ * out other I/O to the inode until we either commit or
+ * abort. */
+ struct list_head ip_handle_list;
+ struct _ocfs_journal_handle *ip_handle;
+
+ atomic_t ip_clean_buffer_seq;
+ u32 ip_flags; /* see below */
+
+ /* protected by recovery_lock. */
+ struct inode *ip_next_orphan;
+
+ u32 ip_dir_start_lookup;
+
+ /* next two are protected by trans_inc_lock */
+ /* which transaction were we created on? Zero if none. */
+ unsigned long ip_created_trans;
+ /* last transaction we were a part of. */
+ unsigned long ip_last_trans;
+
+ struct inode vfs_inode;
+};
+
+/*
+ * Flags for the ip_flags field
+ */
+/* Special types of inodes */
+#define OCFS2_INODE_SYSTEM_FILE 0x00000001
+#define OCFS2_INODE_JOURNAL 0x00000002
+#define OCFS2_INODE_BITMAP 0x00000004
+/* Has the inode been deleted yet? */
+#define OCFS2_INODE_DELETED 0x00000008
+/* Another node is deleting, so our delete is a nop */
+#define OCFS2_INODE_SKIP_DELETE 0x00000010
+/* Does someone have the file open O_DIRECT */
+#define OCFS2_INODE_OPEN_DIRECT 0x00000020
+
+static inline struct ocfs2_inode_info *OCFS2_I(struct inode *inode)
+{
+ return container_of(inode, struct ocfs2_inode_info, vfs_inode);
+}
+
+#define INODE_DELETED(i) (OCFS2_I(i)->ip_flags & OCFS2_INODE_DELETED)
+#define SET_INODE_DELETED(i) (OCFS2_I(i)->ip_flags |= OCFS2_INODE_DELETED)
+#define CLEAR_INODE_DELETED(i) (OCFS2_I(i)->ip_flags &= (~OCFS2_INODE_DELETED))
+
+#define INODE_JOURNAL(i) (OCFS2_I(i)->ip_flags & OCFS2_INODE_JOURNAL)
+#define SET_INODE_JOURNAL(i) (OCFS2_I(i)->ip_flags |= OCFS2_INODE_JOURNAL)
+#define CLEAR_INODE_JOURNAL(i) (OCFS2_I(i)->ip_flags &= (~OCFS2_INODE_JOURNAL))
+
extern kmem_cache_t *ocfs2_inode_cache;
struct buffer_head *ocfs_bread(struct inode * inode, int block,
int *err, int reada);
-void ocfs_clear_inode(struct inode *inode);
+void ocfs2_clear_inode(struct inode *inode);
void ocfs_delete_inode(struct inode *inode);
struct inode *ocfs_iget(ocfs_super *osb, u64 feoff);
struct inode *ocfs_ilookup(ocfs_super *osb, u64 feoff);
Modified: trunk/fs/ocfs2/journal.c
===================================================================
--- trunk/fs/ocfs2/journal.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/journal.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -214,26 +214,27 @@
down(&inode->i_sem);
/* sanity check */
- OCFS_ASSERT(!OCFS_I(inode)->ip_handle);
- OCFS_ASSERT(list_empty(&OCFS_I(inode)->ip_handle_list));
+ OCFS_ASSERT(!OCFS2_I(inode)->ip_handle);
+ OCFS_ASSERT(list_empty(&OCFS2_I(inode)->ip_handle_list));
- OCFS_I(inode)->ip_handle = handle;
- list_del(&(OCFS_I(inode)->ip_handle_list));
- list_add_tail(&(OCFS_I(inode)->ip_handle_list), &(handle->inode_list));
+ OCFS2_I(inode)->ip_handle = handle;
+ list_del(&(OCFS2_I(inode)->ip_handle_list));
+ list_add_tail(&(OCFS2_I(inode)->ip_handle_list), &(handle->inode_list));
}
static void ocfs_handle_unlock_inodes(ocfs_journal_handle *handle)
{
struct list_head *p, *n;
struct inode *inode;
- ocfs_inode_private *ip;
+ struct ocfs2_inode_info *oi;
list_for_each_safe(p, n, &handle->inode_list) {
- ip = list_entry(p, ocfs_inode_private, ip_handle_list);
- inode = ip->ip_inode;
+ oi = list_entry(p, struct ocfs2_inode_info,
+ ip_handle_list);
+ inode = &oi->vfs_inode;
- OCFS_I(inode)->ip_handle = NULL;
- list_del_init(&OCFS_I(inode)->ip_handle_list);
+ OCFS2_I(inode)->ip_handle = NULL;
+ list_del_init(&OCFS2_I(inode)->ip_handle_list);
up(&inode->i_sem);
iput(inode);
@@ -391,7 +392,7 @@
BUG();
}
- down(&OCFS_I(inode)->ip_io_sem);
+ down(&OCFS2_I(inode)->ip_io_sem);
switch (type) {
case OCFS_JOURNAL_ACCESS_CREATE:
case OCFS_JOURNAL_ACCESS_WRITE:
@@ -406,7 +407,7 @@
status = -EINVAL;
mlog(ML_ERROR, "Uknown access type!\n");
}
- up(&OCFS_I(inode)->ip_io_sem);
+ up(&OCFS2_I(inode)->ip_io_sem);
if (status < 0)
mlog(ML_ERROR, "Error %d getting %d access to buffer!\n",
@@ -489,7 +490,7 @@
if (atomic_read(&inode->i_count) == 1)
mlog(ML_ERROR,
"Inode %"MLFu64", I'm doing a last iput for!",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
iput(inode);
kmem_cache_free(ocfs2_lock_cache, lock);
}
@@ -551,17 +552,17 @@
mlog(0, "fe->i_size = %"MLFu64"\n", fe->i_size);
mlog(0, "fe->i_clusters = %u\n", fe->i_clusters);
mlog(0, "fe->i_blkno = %"MLFu64"\n", fe->i_blkno);
- mlog(0, "inode->ip_clusters = %u\n", OCFS_I(inode)->ip_clusters);
+ mlog(0, "inode->ip_clusters = %u\n", OCFS2_I(inode)->ip_clusters);
- if (OCFS_I(inode)->ip_clusters != fe->i_clusters)
+ if (OCFS2_I(inode)->ip_clusters != fe->i_clusters)
mlog(ML_ERROR, "inode and fe alloc sizes differ! (%u != %u",
- OCFS_I(inode)->ip_clusters, fe->i_clusters);
+ OCFS2_I(inode)->ip_clusters, fe->i_clusters);
if (inode->i_size != fe->i_size)
mlog(ML_ERROR,
"inode and fe i_size's differ! (%lld != %"MLFu64")",
inode->i_size, fe->i_size);
- OCFS_I(inode)->ip_open_cnt++;
+ OCFS2_I(inode)->ip_open_count++;
/* call the kernels journal init function now */
j_journal = journal_init_inode(inode);
@@ -598,7 +599,7 @@
brelse(bh);
}
if (inode) {
- OCFS_I(inode)->ip_open_cnt--;
+ OCFS2_I(inode)->ip_open_count--;
iput(inode);
}
}
@@ -695,7 +696,7 @@
/* Shutdown the kernel journal system */
journal_destroy(journal->j_journal);
- OCFS_I(inode)->ip_open_cnt--;
+ OCFS2_I(inode)->ip_open_count--;
/* unlock our journal */
ocfs2_meta_unlock(inode, 1);
@@ -1140,7 +1141,7 @@
node_num, slot_num,
MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev));
- OCFS_I(inode)->ip_clusters = fe->i_clusters;
+ OCFS2_I(inode)->ip_clusters = fe->i_clusters;
status = ocfs_force_read_journal(inode);
if (status < 0) {
@@ -1461,8 +1462,8 @@
continue;
mlog(0, "queue orphan %"MLFu64"\n",
- OCFS_I(iter)->ip_blkno);
- OCFS_I(iter)->ip_next_orphan = inode;
+ OCFS2_I(iter)->ip_blkno);
+ OCFS2_I(iter)->ip_next_orphan = inode;
inode = iter;
}
brelse(bh);
@@ -1476,13 +1477,14 @@
orphan_dir_inode = NULL;
while (inode) {
- mlog(0, "iput orphan %"MLFu64"\n", OCFS_I(inode)->ip_blkno);
+ mlog(0, "iput orphan %"MLFu64"\n",
+ OCFS2_I(inode)->ip_blkno);
- iter = OCFS_I(inode)->ip_next_orphan;
+ iter = OCFS2_I(inode)->ip_next_orphan;
- spin_lock(&OCFS_I(inode)->ip_lock);
- OCFS_I(inode)->ip_orphaned_slot = slot;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_orphaned_slot = slot;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
iput(inode);
Modified: trunk/fs/ocfs2/journal.h
===================================================================
--- trunk/fs/ocfs2/journal.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/journal.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -87,7 +87,7 @@
struct inode *inode)
{
spin_lock(&trans_inc_lock);
- OCFS_I(inode)->ip_last_trans = journal->j_trans_id;
+ OCFS2_I(inode)->ip_last_trans = journal->j_trans_id;
spin_unlock(&trans_inc_lock);
}
@@ -102,7 +102,7 @@
ocfs_journal *journal = OCFS2_SB(inode->i_sb)->journal;
spin_lock(&trans_inc_lock);
- ret = time_after(journal->j_trans_id, OCFS_I(inode)->ip_last_trans);
+ ret = time_after(journal->j_trans_id, OCFS2_I(inode)->ip_last_trans);
spin_unlock(&trans_inc_lock);
return ret;
}
@@ -117,13 +117,13 @@
/* System files are never "new" as they're written out by
* mkfs. This helps us early during mount, before we have the
* journal open and j_trans_id could be junk. */
- if (OCFS_I(inode)->ip_flags & OCFS_INODE_SYSTEM_FILE)
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE)
return 0;
spin_lock(&trans_inc_lock);
ret = !(time_after(OCFS2_SB(inode->i_sb)->journal->j_trans_id,
- OCFS_I(inode)->ip_created_trans));
+ OCFS2_I(inode)->ip_created_trans));
if (!ret)
- OCFS_I(inode)->ip_created_trans = 0;
+ OCFS2_I(inode)->ip_created_trans = 0;
spin_unlock(&trans_inc_lock);
return ret;
}
@@ -132,7 +132,7 @@
struct inode *inode)
{
spin_lock(&trans_inc_lock);
- OCFS_I(inode)->ip_created_trans = osb->journal->j_trans_id;
+ OCFS2_I(inode)->ip_created_trans = osb->journal->j_trans_id;
spin_unlock(&trans_inc_lock);
}
Modified: trunk/fs/ocfs2/localalloc.c
===================================================================
--- trunk/fs/ocfs2/localalloc.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/localalloc.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -37,6 +37,7 @@
#include "alloc.h"
#include "dlmglue.h"
+#include "inode.h"
#include "journal.h"
#include "localalloc.h"
#include "suballoc.h"
@@ -133,8 +134,8 @@
mlog_errno(status);
goto bail;
}
- status = ocfs_read_block(osb, OCFS_I(inode)->ip_blkno, &alloc_bh, 0,
- inode);
+ status = ocfs_read_block(osb, OCFS2_I(inode)->ip_blkno,
+ &alloc_bh, 0, inode);
if (status < 0) {
mlog_errno(status);
goto bail;
@@ -144,7 +145,7 @@
if (!(alloc->i_flags & (OCFS2_LOCAL_ALLOC_FL|OCFS2_BITMAP_FL))) {
mlog(ML_ERROR, "Invalid local alloc inode, %"MLFu64"\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
status = -EINVAL;
goto bail;
}
@@ -205,7 +206,6 @@
int status;
ocfs_journal_handle *handle = NULL;
struct inode *local_alloc_inode = NULL;
- ocfs_inode_private *oip;
struct buffer_head *bh = NULL;
struct buffer_head *main_bm_bh = NULL;
struct inode *main_bm_inode = NULL;
@@ -226,7 +226,6 @@
mlog_errno(status);
goto bail;
}
- oip = OCFS_I(local_alloc_inode);
osb->local_alloc_state = OCFS2_LA_DISABLED;
@@ -344,8 +343,8 @@
goto bail;
}
- status = ocfs_read_block(osb, OCFS_I(inode)->ip_blkno, &alloc_bh, 0,
- inode);
+ status = ocfs_read_block(osb, OCFS2_I(inode)->ip_blkno,
+ &alloc_bh, 0, inode);
if (status < 0) {
mlog_errno(status);
goto bail;
Modified: trunk/fs/ocfs2/mmap.c
===================================================================
--- trunk/fs/ocfs2/mmap.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/mmap.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -171,7 +171,7 @@
OCFS_ASSERT(inode);
- return OCFS_I(inode)->ip_blkno;
+ return OCFS2_I(inode)->ip_blkno;
}
static inline struct rb_node * __ocfs2_buffer_lock_ctxt_root(
@@ -192,7 +192,7 @@
OCFS_ASSERT(ctxt);
OCFS_ASSERT(inode);
- blkno = OCFS_I(inode)->ip_blkno;
+ blkno = OCFS2_I(inode)->ip_blkno;
while(*p) {
parent = *p;
@@ -552,7 +552,7 @@
* level cluster lock. */
mlog(0, "inode %"MLFu64", had a PR, looping back "
"for EX\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
ocfs2_meta_unlock(inode, level);
info->wl_have_target_meta = 0;
level = 1;
@@ -575,7 +575,7 @@
mlog_errno(status);
mlog(ML_ERROR, "Failed to extend inode %"MLFu64
" from %lld to %"MLFu64,
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
*ppos, info->wl_newsize);
}
ret = status;
@@ -599,7 +599,8 @@
&& status != -EINTR
&& status != -ERESTARTSYS)
mlog(ML_ERROR, "status return of %d extending inode "
- "%"MLFu64"\n", status, OCFS_I(inode)->ip_blkno);
+ "%"MLFu64"\n", status,
+ OCFS2_I(inode)->ip_blkno);
status = 0;
}
@@ -653,7 +654,7 @@
inode = binode->ba_inode;
printk("(%u) ocfs2: inode %llu, locked %d, is target? %s\n",
- current->pid, OCFS_I(inode)->ip_blkno,
+ current->pid, OCFS2_I(inode)->ip_blkno,
binode->ba_locked,
ocfs2_buffer_lock_is_target(ctxt, inode) ? "yes" :
"no");
Modified: trunk/fs/ocfs2/mmap.h
===================================================================
--- trunk/fs/ocfs2/mmap.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/mmap.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -28,42 +28,40 @@
static inline void ocfs2_add_io_marker(struct inode *inode,
ocfs2_io_marker *task)
{
- ocfs_inode_private *oip = OCFS_I(inode);
+ struct ocfs2_inode_info *oi = OCFS2_I(inode);
task->io_task = current;
- spin_lock(&oip->ip_lock);
- list_add(&task->io_list, &oip->ip_io_markers);
- spin_unlock(&oip->ip_lock);
+ spin_lock(&oi->ip_lock);
+ list_add(&task->io_list, &oi->ip_io_markers);
+ spin_unlock(&oi->ip_lock);
}
static inline void ocfs2_del_io_marker(struct inode *inode,
ocfs2_io_marker *task)
{
- ocfs_inode_private *oip = OCFS_I(inode);
-
- spin_lock(&oip->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
if (!list_empty(&task->io_list))
list_del_init(&task->io_list);
- spin_unlock(&oip->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
}
static inline int ocfs2_is_in_io_marker_list(struct inode *inode,
struct task_struct *task)
{
int ret = 0;
- ocfs_inode_private *oip = OCFS_I(inode);
+ struct ocfs2_inode_info *oi = OCFS2_I(inode);
struct list_head *p;
ocfs2_io_marker *tmp;
- spin_lock(&oip->ip_lock);
- list_for_each(p, &oip->ip_io_markers) {
+ spin_lock(&oi->ip_lock);
+ list_for_each(p, &oi->ip_io_markers) {
tmp = list_entry(p, ocfs2_io_marker, io_list);
if (tmp->io_task == task) {
ret = 1;
break;
}
}
- spin_unlock(&oip->ip_lock);
+ spin_unlock(&oi->ip_lock);
return ret;
}
Modified: trunk/fs/ocfs2/namei.c
===================================================================
--- trunk/fs/ocfs2/namei.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/namei.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -266,14 +266,14 @@
memset(new_bh->b_data, 0, osb->sb->s_blocksize);
de = (struct ocfs2_dir_entry *) new_bh->b_data;
- de->inode = cpu_to_le64(OCFS_I(inode)->ip_blkno);
+ de->inode = cpu_to_le64(OCFS2_I(inode)->ip_blkno);
de->name_len = 1;
de->rec_len =
cpu_to_le16(OCFS2_DIR_REC_LEN(de->name_len));
strcpy (de->name, ".");
ocfs_set_de_type(de, S_IFDIR);
de = (struct ocfs2_dir_entry *) ((char *) de + le16_to_cpu(de->rec_len));
- de->inode = cpu_to_le64(OCFS_I(parent)->ip_blkno);
+ de->inode = cpu_to_le64(OCFS2_I(parent)->ip_blkno);
de->rec_len = cpu_to_le16(inode->i_sb->s_blocksize -
OCFS2_DIR_REC_LEN(1));
de->name_len = 2;
@@ -328,24 +328,18 @@
if (S_ISDIR(mode) && (dir->i_nlink >= OCFS2_LINK_MAX)) {
mlog(ML_ERROR, "inode %"MLFu64" has i_nlink of %u\n",
- OCFS_I(dir)->ip_blkno, dir->i_nlink);
+ OCFS2_I(dir)->ip_blkno, dir->i_nlink);
status = -EMLINK;
goto leave;
}
- inode = new_inode (dir->i_sb);
- if (IS_ERR (inode)) {
+ inode = new_inode(dir->i_sb);
+ if (IS_ERR(inode)) {
status = PTR_ERR(inode);
mlog(ML_ERROR, "new_inode failed!\n");
goto leave;
}
- if (ocfs_inode_init_private(inode)) {
- status = -ENOMEM;
- mlog_errno(status);
- goto leave;
- }
-
handle = ocfs_alloc_handle(osb);
if (handle == NULL) {
status = -ENOMEM;
@@ -412,6 +406,7 @@
fe = (ocfs2_dinode *)new_fe_bh->b_data;
+ OCFS2_I(inode)->ip_blkno = fe->i_blkno;
if (ocfs_populate_inode(inode, fe, 1) < 0) {
mlog(ML_ERROR, "populate inode failed! bh->b_blocknr=%llu, "
"i_blkno=%"MLFu64", i_ino=%lu\n",
@@ -565,7 +560,7 @@
fe->id1.dev1.i_rdev = cpu_to_le64(huge_encode_dev(dev));
if (S_ISLNK (mode) || S_ISDIR (mode) || S_ISREG (mode))
- atomic_set(GET_INODE_CLEAN_SEQ(inode), atomic_read(&osb->clean_buffer_seq));
+ ocfs2_init_inode_seq(inode);
if (S_ISDIR (mode))
fe->i_links_count = 2;
@@ -728,7 +723,8 @@
goto bail;
}
- err = ocfs_add_entry(handle, dentry, inode, OCFS_I(inode)->ip_blkno,
+ err = ocfs_add_entry(handle, dentry, inode,
+ OCFS2_I(inode)->ip_blkno,
parent_fe_bh, de_bh);
if (err) {
fe->i_links_count--;
@@ -778,7 +774,7 @@
OCFS_ASSERT((dentry->d_parent->d_inode == dir));
- mlog(0, "ino = %"MLFu64"\n", OCFS_I(inode)->ip_blkno);
+ mlog(0, "ino = %"MLFu64"\n", OCFS2_I(inode)->ip_blkno);
if (inode == osb->root_inode) {
mlog(0, "Cannot delete the root directory\n");
@@ -809,7 +805,7 @@
goto leave;
}
- if (blkno != OCFS_I(inode)->ip_blkno)
+ if (blkno != OCFS2_I(inode)->ip_blkno)
BUG();
status = ocfs2_meta_lock(inode, handle, &fe_bh, 1);
@@ -943,14 +939,13 @@
struct inode *inode2)
{
int status;
- ocfs_inode_private *oip1 = OCFS_I(inode1);
- ocfs_inode_private *oip2 = OCFS_I(inode2);
+ struct ocfs2_inode_info *oi1 = OCFS2_I(inode1);
+ struct ocfs2_inode_info *oi2 = OCFS2_I(inode2);
struct buffer_head **tmpbh;
struct inode *tmpinode;
mlog_entry("(inode1 = %"MLFu64", inode2 = %"MLFu64")\n",
- OCFS_I(inode1)->ip_blkno,
- OCFS_I(inode2)->ip_blkno);
+ oi1->ip_blkno, oi2->ip_blkno);
OCFS_ASSERT(handle);
@@ -960,8 +955,8 @@
*bh2 = NULL;
/* we always want to lock the one with the lower lockid first. */
- if (oip1->ip_blkno != oip2->ip_blkno) {
- if (oip1->ip_blkno < oip2->ip_blkno) {
+ if (oi1->ip_blkno != oi2->ip_blkno) {
+ if (oi1->ip_blkno < oi2->ip_blkno) {
/* switch id1 and id2 around */
mlog(0, "switching them around...\n");
tmpbh = bh2;
@@ -1095,7 +1090,7 @@
status = -EIO;
if (le64_to_cpu(PARENT_INO(old_inode_de_bh->b_data)) !=
- OCFS_I(old_dir)->ip_blkno)
+ OCFS2_I(old_dir)->ip_blkno)
goto bail;
status = -EMLINK;
if (!new_inode && new_dir!=old_dir &&
@@ -1124,7 +1119,7 @@
* and merrily kill the link to whatever was created under the
* same name. Goodbye sticky bit ;-<
*/
- if (le64_to_cpu(old_de->inode) != OCFS_I(old_inode)->ip_blkno)
+ if (le64_to_cpu(old_de->inode) != OCFS2_I(old_inode)->ip_blkno)
goto bail;
/* check if the target already exists (in which case we need
@@ -1152,7 +1147,7 @@
if (!new_inode)
BUG();
- if (newfe_blkno != OCFS_I(new_inode)->ip_blkno)
+ if (newfe_blkno != OCFS2_I(new_inode)->ip_blkno)
BUG();
status = ocfs2_meta_lock(new_inode, handle, &newfe_bh, 1);
@@ -1235,7 +1230,7 @@
goto bail;
}
new_de->inode =
- le64_to_cpu(OCFS_I(old_inode)->ip_blkno);
+ le64_to_cpu(OCFS2_I(old_inode)->ip_blkno);
new_de->file_type = old_de->file_type;
new_dir->i_version++;
status = ocfs_journal_dirty(handle, new_de_bh);
@@ -1257,7 +1252,7 @@
} else {
/* if the name was not found in new_dir, add it now */
status = ocfs_add_entry (handle, new_dentry, old_inode,
- OCFS_I(old_inode)->ip_blkno,
+ OCFS2_I(old_inode)->ip_blkno,
new_dir_bh, insert_entry_bh);
}
@@ -1281,7 +1276,7 @@
old_inode_de_bh,
OCFS_JOURNAL_ACCESS_WRITE);
PARENT_INO(old_inode_de_bh->b_data) =
- le64_to_cpu(OCFS_I(new_dir)->ip_blkno);
+ le64_to_cpu(OCFS2_I(new_dir)->ip_blkno);
status = ocfs_journal_dirty(handle, old_inode_de_bh);
old_dir->i_nlink--;
if (new_inode) {
@@ -1301,7 +1296,7 @@
mlog(ML_ERROR, "need to change nlink for new "
"dir %"MLFu64" from %d to %d "
"but bh is NULL\n",
- OCFS_I(new_dir)->ip_blkno,
+ OCFS2_I(new_dir)->ip_blkno,
(int)new_dir_nlink, new_dir->i_nlink);
} else {
ocfs2_dinode *fe;
@@ -1320,7 +1315,8 @@
mlog(ML_ERROR, "need to change nlink for old dir "
"%"MLFu64" from %d to %d but bh is "
"NULL!\n",
- OCFS_I(old_dir)->ip_blkno, (int)old_dir_nlink,
+ OCFS2_I(old_dir)->ip_blkno,
+ (int)old_dir_nlink,
old_dir->i_nlink);
} else {
ocfs2_dinode *fe;
@@ -1391,7 +1387,7 @@
inode->i_blocks, i_size_read(inode), blocks);
/* Sanity check -- make sure we're going to fit. */
- if (bytes_left > ocfs2_clusters_to_bytes(sb, OCFS_I(inode)->ip_clusters)) {
+ if (bytes_left > ocfs2_clusters_to_bytes(sb, OCFS2_I(inode)->ip_clusters)) {
status = -EIO;
mlog_errno(status);
goto bail;
@@ -1510,14 +1506,6 @@
goto bail;
}
- if (ocfs_inode_init_private(inode)) {
- status = -ENOMEM;
- mlog_errno(status);
- iput(inode);
- inode = NULL;
- goto bail;
- }
-
credits = ocfs_calc_symlink_credits(sb);
handle = ocfs_alloc_handle(osb);
@@ -1584,6 +1572,7 @@
fe = (ocfs2_dinode *) new_fe_bh->b_data;
+ OCFS2_I(inode)->ip_blkno = fe->i_blkno;
if (ocfs_populate_inode (inode, fe, 1) < 0) {
mlog(ML_ERROR, "populate inode failed! bh->b_blocknr=%llu, "
"i_blkno=%"MLFu64", i_ino=%lu\n",
@@ -1683,7 +1672,7 @@
if (error_msg != NULL)
mlog(ML_ERROR, "bad entry in directory #%"MLFu64": %s - "
"offset=%lu, inode=%"MLFu64", rec_len=%d, name_len=%d",
- OCFS_I(dir)->ip_blkno, error_msg, offset,
+ OCFS2_I(dir)->ip_blkno, error_msg, offset,
le64_to_cpu(de->inode), rlen, de->name_len);
return error_msg == NULL ? 1 : 0;
}
@@ -1891,7 +1880,7 @@
sb = dir->i_sb;
nblocks = i_size_read(dir) >> sb->s_blocksize_bits;
- start = OCFS_I(dir)->ip_dir_start_lookup;
+ start = OCFS2_I(dir)->ip_dir_start_lookup;
if (start >= nblocks)
start = 0;
block = start;
@@ -1936,7 +1925,7 @@
i = search_dirblock(bh, dir, name, namelen,
block << sb->s_blocksize_bits, res_dir);
if (i == 1) {
- OCFS_I(dir)->ip_dir_start_lookup = block;
+ OCFS2_I(dir)->ip_dir_start_lookup = block;
ret = bh;
goto cleanup_and_exit;
} else {
@@ -2010,7 +1999,7 @@
struct buffer_head *orphan_dir_bh = NULL;
int status = 0;
- status = ocfs_blkno_stringify(OCFS_I(inode)->ip_blkno, name);
+ status = ocfs_blkno_stringify(OCFS2_I(inode)->ip_blkno, name);
if (status < 0) {
mlog_errno(status);
goto leave;
@@ -2075,7 +2064,8 @@
goto leave;
}
- status = ocfs_read_block(osb, OCFS_I(orphan_dir_inode)->ip_blkno,
+ status = ocfs_read_block(osb,
+ OCFS2_I(orphan_dir_inode)->ip_blkno,
&orphan_dir_bh, OCFS_BH_CACHED,
orphan_dir_inode);
if (status < 0) {
@@ -2105,7 +2095,8 @@
status = __ocfs_add_entry(handle, orphan_dir_inode, name,
OCFS2_ORPHAN_NAMELEN, inode,
- OCFS_I(inode)->ip_blkno, orphan_dir_bh,
+ OCFS2_I(inode)->ip_blkno,
+ orphan_dir_bh,
de_bh);
if (status < 0) {
mlog_errno(status);
@@ -2117,12 +2108,12 @@
/* Record which orphan dir our inode now resides
* in. delete_inode will use this to determine which orphan
* dir to lock. */
- spin_lock(&OCFS_I(inode)->ip_lock);
- OCFS_I(inode)->ip_orphaned_slot = osb->slot_num;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_orphaned_slot = osb->slot_num;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
mlog(0, "Inode %"MLFu64" orphaned in slot %d\n",
- OCFS_I(inode)->ip_blkno, osb->slot_num);
+ OCFS2_I(inode)->ip_blkno, osb->slot_num);
leave:
if (orphan_dir_inode)
@@ -2148,14 +2139,14 @@
mlog_entry_void();
- status = ocfs_blkno_stringify(OCFS_I(inode)->ip_blkno, name);
+ status = ocfs_blkno_stringify(OCFS2_I(inode)->ip_blkno, name);
if (status < 0) {
mlog_errno(status);
goto leave;
}
mlog(0, "removing '%s' from orphan dir %"MLFu64" (namelen=%d)\n",
- name, OCFS_I(orphan_dir_inode)->ip_blkno, OCFS2_ORPHAN_NAMELEN);
+ name, OCFS2_I(orphan_dir_inode)->ip_blkno, OCFS2_ORPHAN_NAMELEN);
/* find it's spot in the orphan directory */
target_de_bh = ocfs_find_entry(name, OCFS2_ORPHAN_NAMELEN,
Modified: trunk/fs/ocfs2/ocfs.h
===================================================================
--- trunk/fs/ocfs2/ocfs.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/ocfs.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -192,81 +192,6 @@
wait_queue_head_t l_event;
} ocfs2_lock_res;
-/* OCFS2 Inode Private Data */
-typedef struct _ocfs_inode_private
-{
- /* inode and feoff fields never change and are always safe to
- * read. */
- struct inode *ip_inode;
-
- u64 ip_blkno;
-
- ocfs2_lock_res ip_meta_lockres;
- ocfs2_lock_res ip_data_lockres;
-
- /* protects allocation changes on this inode. */
- struct rw_semaphore ip_alloc_sem;
-
- /* These fields are protected by ip_lock */
- spinlock_t ip_lock;
- u32 ip_open_cnt;
- u32 ip_clusters;
- loff_t ip_mmu_private;
- struct ocfs2_extent_map ip_map;
- struct list_head ip_io_markers;
- int ip_orphaned_slot;
-
- struct semaphore ip_io_sem;
-
- /* Used by the journalling code to attach an inode to a
- * handle. These are protected by ip_io_sem in order to lock
- * out other I/O to the inode until we either commit or
- * abort. */
- struct list_head ip_handle_list;
- struct _ocfs_journal_handle *ip_handle;
-
- atomic_t ip_clean_buffer_seq;
- u32 ip_flags; /* see below */
-
- /* protected by recovery_lock. */
- struct inode *ip_next_orphan;
-
- u32 ip_dir_start_lookup;
-
- /* next two are protected by trans_inc_lock */
- /* which transaction were we created on? Zero if none. */
- unsigned long ip_created_trans;
- /* last transaction we were a part of. */
- unsigned long ip_last_trans;
-} ocfs_inode_private;
-
-/* 'flags' flags. */
-/* has this inode been deleted, either from this node or from another node. */
-#define OCFS_INODE_DELETED 0x00000001
-/* is this the journal inode? */
-#define OCFS_INODE_JOURNAL 0x00000002
-/* set on init_private, cleared on clear_inode */
-#define OCFS_INODE_INITIALIZED 0x00000004
-/* is this a system file? */
-#define OCFS_INODE_SYSTEM_FILE 0x00000008
-/* are we going to let another node deal with deletion of this inode? */
-#define OCFS_INODE_SKIP_DELETE 0x00000010
-#define OCFS_INODE_IN_REFRESH 0x00000020
-#define OCFS_INODE_BITMAP 0x00000040
-#define OCFS_INODE_OPEN_DIRECT 0x00000080
-
-#define OCFS_I(i) ((ocfs_inode_private *)(i->u.generic_ip))
-
-#define GET_INODE_CLEAN_SEQ(i) (atomic_t *)(&(OCFS_I(i)->ip_clean_buffer_seq))
-
-#define INODE_DELETED(i) (OCFS_I(i)->ip_flags & OCFS_INODE_DELETED)
-#define SET_INODE_DELETED(i) (OCFS_I(i)->ip_flags |= OCFS_INODE_DELETED)
-#define CLEAR_INODE_DELETED(i) (OCFS_I(i)->ip_flags &= (~OCFS_INODE_DELETED))
-
-#define INODE_JOURNAL(i) (OCFS_I(i)->ip_flags & OCFS_INODE_JOURNAL)
-#define SET_INODE_JOURNAL(i) (OCFS_I(i)->ip_flags |= OCFS_INODE_JOURNAL)
-#define CLEAR_INODE_JOURNAL(i) (OCFS_I(i)->ip_flags &= (~OCFS_INODE_JOURNAL))
-
typedef enum _ocfs_vol_state
{
VOLUME_INIT = 0,
@@ -359,7 +284,6 @@
atomic_t needs_checkpoint;
struct _ocfs_journal *journal;
atomic_t clean_buffer_seq;
- spinlock_t clean_buffer_lock;
enum ocfs2_local_alloc_state local_alloc_state;
struct buffer_head *local_alloc_bh;
Modified: trunk/fs/ocfs2/ocfs2.h
===================================================================
--- trunk/fs/ocfs2/ocfs2.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/ocfs2.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -26,6 +26,7 @@
#ifndef OCFS2_H
#define OCFS2_H
+
static inline u64 ocfs2_clusters_to_blocks(struct super_block *sb,
u32 clusters)
{
@@ -90,3 +91,4 @@
#define ocfs2_test_bit ext2_test_bit
#define ocfs2_find_next_zero_bit ext2_find_next_zero_bit
#endif /* OCFS2_H */
+
Modified: trunk/fs/ocfs2/proc.c
===================================================================
--- trunk/fs/ocfs2/proc.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/proc.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -38,6 +38,7 @@
#include "proc.h"
#include "alloc.h"
#include "heartbeat.h"
+#include "inode.h"
#include "journal.h"
#include "ver.h"
Modified: trunk/fs/ocfs2/slot_map.c
===================================================================
--- trunk/fs/ocfs2/slot_map.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/slot_map.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -37,6 +37,7 @@
#include "dlmglue.h"
#include "extent_map.h"
#include "heartbeat.h"
+#include "inode.h"
#include "slot_map.h"
#include "sysfile.h"
Modified: trunk/fs/ocfs2/suballoc.c
===================================================================
--- trunk/fs/ocfs2/suballoc.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/suballoc.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -37,6 +37,7 @@
#include "alloc.h"
#include "dlmglue.h"
+#include "inode.h"
#include "journal.h"
#include "localalloc.h"
#include "suballoc.h"
@@ -167,7 +168,7 @@
bg->bg_bits = (u32) cl->cl_cpg * (u32) cl->cl_bpc;
bg->bg_chain = my_chain;
bg->bg_next_group = cl->cl_recs[my_chain].c_blkno;
- bg->bg_parent_dinode = OCFS_I(alloc_inode)->ip_blkno;
+ bg->bg_parent_dinode = OCFS2_I(alloc_inode)->ip_blkno;
bg->bg_blkno = group_blkno;
/* set the 1st bit in the bitmap to account for the descriptor block */
ocfs2_set_bit(0, (unsigned long *) bg->bg_bitmap);
@@ -317,11 +318,11 @@
goto bail;
}
- spin_lock(&OCFS_I(alloc_inode)->ip_lock);
- OCFS_I(alloc_inode)->ip_clusters = fe->i_clusters;
+ spin_lock(&OCFS2_I(alloc_inode)->ip_lock);
+ OCFS2_I(alloc_inode)->ip_clusters = fe->i_clusters;
fe->i_size = ocfs2_clusters_to_bytes(alloc_inode->i_sb,
fe->i_clusters);
- spin_unlock(&OCFS_I(alloc_inode)->ip_lock);
+ spin_unlock(&OCFS2_I(alloc_inode)->ip_lock);
i_size_write(alloc_inode, fe->i_size);
alloc_inode->i_blocks =
ocfs2_align_bytes_to_sectors(i_size_read(alloc_inode));
@@ -923,7 +924,7 @@
chain = ac->ac_chain;
mlog(0, "trying to alloc %u bits from chain %u, inode %"MLFu64"\n",
- bits_wanted, chain, OCFS_I(alloc_inode)->ip_blkno);
+ bits_wanted, chain, OCFS2_I(alloc_inode)->ip_blkno);
status = ocfs_read_block(OCFS2_SB(alloc_inode->i_sb),
cl->cl_recs[chain].c_blkno, &group_bh,
@@ -1402,7 +1403,8 @@
mlog(0, "suballocator %"MLFu64": freeing %u bits from group %"MLFu64
", starting at %u\n",
- OCFS_I(alloc_inode)->ip_blkno, count, bg_blkno, start_bit);
+ OCFS2_I(alloc_inode)->ip_blkno, count, bg_blkno,
+ start_bit);
status = ocfs_read_block(osb, bg_blkno, &group_bh, OCFS_BH_CACHED,
alloc_inode);
Modified: trunk/fs/ocfs2/suballoc.h
===================================================================
--- trunk/fs/ocfs2/suballoc.h 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/suballoc.h 2005-05-23 23:28:05 UTC (rev 2307)
@@ -121,7 +121,7 @@
static inline int ocfs2_is_cluster_bitmap(struct inode *inode)
{
ocfs_super *osb = OCFS2_SB(inode->i_sb);
- return osb->bitmap_blkno == OCFS_I(inode)->ip_blkno;
+ return osb->bitmap_blkno == OCFS2_I(inode)->ip_blkno;
}
/* This is for local alloc ONLY. Others should use the task-specific
Modified: trunk/fs/ocfs2/super.c
===================================================================
--- trunk/fs/ocfs2/super.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/super.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -73,8 +73,8 @@
static u32 osb_id; /* Keeps track of next available OSB Id */
-kmem_cache_t *ocfs2_inode_cache = NULL;
kmem_cache_t *ocfs2_lock_cache = NULL;
+kmem_cache_t *ocfs2_inode_cachep = NULL;
MODULE_AUTHOR("Oracle");
MODULE_LICENSE("GPL");
@@ -101,17 +101,20 @@
static int ocfs_initialize_osb(ocfs_super *osb, struct buffer_head *bh);
static int ocfs2_get_sector(struct super_block *sb, struct buffer_head **bh, int block, int sect_size);
static void ocfs_write_super(struct super_block *sb);
+static struct inode *ocfs2_alloc_inode(struct super_block *sb);
+static void ocfs2_destroy_inode(struct inode *inode);
static unsigned long long ocfs2_max_file_offset(unsigned int blockshift);
static struct super_operations ocfs_sops = {
- .statfs = ocfs_statfs,
- .clear_inode = ocfs_clear_inode,
- .delete_inode = ocfs_delete_inode,
- .sync_fs = ocfs2_sync_fs,
- .write_super = ocfs_write_super,
- .put_super = ocfs_put_super,
-
+ .statfs = ocfs_statfs,
+ .alloc_inode = ocfs2_alloc_inode,
+ .destroy_inode = ocfs2_destroy_inode,
+ .clear_inode = ocfs2_clear_inode,
+ .delete_inode = ocfs_delete_inode,
+ .sync_fs = ocfs2_sync_fs,
+ .write_super = ocfs_write_super,
+ .put_super = ocfs_put_super,
};
struct dentry *ocfs_get_parent(struct dentry *child);
@@ -276,6 +279,23 @@
return status;
} /* ocfs_release_system_inodes */
+/* We're allocating fs objects, use GFP_NOFS */
+static struct inode *ocfs2_alloc_inode(struct super_block *sb)
+{
+ struct ocfs2_inode_info *oi;
+
+ oi = kmem_cache_alloc(ocfs2_inode_cachep, SLAB_NOFS);
+ if (!oi)
+ return NULL;
+
+ return &oi->vfs_inode;
+}
+
+static void ocfs2_destroy_inode(struct inode *inode)
+{
+ kmem_cache_free(ocfs2_inode_cachep, OCFS2_I(inode));
+}
+
/* From xfs_super.c:xfs_max_file_offset
* Copyright (c) 2000-2004 Silicon Graphics, Inc.
*/
@@ -606,17 +626,49 @@
return status;
} /* ocfs_statfs */
+static void ocfs2_inode_init_once(void *data, kmem_cache_t *cachep, unsigned long flags)
+{
+ struct ocfs2_inode_info *oi = data;
+
+ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
+ SLAB_CTOR_CONSTRUCTOR) {
+ oi->ip_flags = 0;
+ atomic_set(&oi->ip_clean_buffer_seq, 0);
+ oi->ip_open_count = 0;
+ spin_lock_init(&oi->ip_lock);
+ ocfs2_extent_map_init(&oi->vfs_inode);
+ INIT_LIST_HEAD(&oi->ip_handle_list);
+ INIT_LIST_HEAD(&oi->ip_io_markers);
+ oi->ip_handle = NULL;
+ oi->ip_created_trans = 0;
+ oi->ip_last_trans = 0;
+ oi->ip_dir_start_lookup = 0;
+
+ init_rwsem(&oi->ip_alloc_sem);
+ init_MUTEX(&(oi->ip_io_sem));
+
+ oi->ip_blkno = 0ULL;
+ oi->ip_clusters = 0;
+ oi->ip_mmu_private = 0LL;
+
+ ocfs2_lock_res_init_once(&oi->ip_meta_lockres);
+ ocfs2_lock_res_init_once(&oi->ip_meta_lockres);
+
+ inode_init_once(&oi->vfs_inode);
+ }
+}
+
/*
* ocfs_initialize_mem_caches()
*
*/
static int ocfs_initialize_mem_caches(void)
{
- ocfs2_inode_cache = kmem_cache_create("ocfs2_inode",
- sizeof(ocfs_inode_private), 0,
- SLAB_NO_REAP|SLAB_HWCACHE_ALIGN,
- NULL, NULL);
- if (!ocfs2_inode_cache)
+ ocfs2_inode_cachep = kmem_cache_create("ocfs2_inode_cache",
+ sizeof(struct ocfs2_inode_info),
+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+ ocfs2_inode_init_once, NULL);
+ if (!ocfs2_inode_cachep)
return -ENOMEM;
ocfs2_lock_cache = kmem_cache_create("ocfs2_lock",
@@ -635,12 +687,12 @@
*/
static void ocfs_free_mem_caches(void)
{
- if (ocfs2_inode_cache)
- kmem_cache_destroy(ocfs2_inode_cache);
+ if (ocfs2_inode_cachep)
+ kmem_cache_destroy(ocfs2_inode_cachep);
if (ocfs2_lock_cache)
kmem_cache_destroy(ocfs2_lock_cache);
- ocfs2_inode_cache = ocfs2_lock_cache = NULL;
+ ocfs2_inode_cachep = ocfs2_lock_cache = NULL;
} /* ocfs_free_mem_caches */
static int ocfs2_sb_probe(struct super_block *sb,
@@ -1062,7 +1114,6 @@
init_waitqueue_head(&osb->checkpoint_event);
atomic_set(&osb->needs_checkpoint, 0);
atomic_set(&osb->clean_buffer_seq, 1);
- spin_lock_init(&osb->clean_buffer_lock);
osb->node_num = OCFS_INVALID_NODE_NUM;
osb->slot_num = OCFS_INVALID_NODE_NUM;
@@ -1239,7 +1290,7 @@
goto bail;
}
- osb->bitmap_blkno = OCFS_I(inode)->ip_blkno;
+ osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno;
status = ocfs_read_block(osb, osb->bitmap_blkno, &bitmap_bh, 0, inode);
iput(inode);
Modified: trunk/fs/ocfs2/symlink.c
===================================================================
--- trunk/fs/ocfs2/symlink.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/symlink.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -250,7 +250,7 @@
mlog_entry_void();
status = ocfs_read_block(OCFS2_SB(inode->i_sb),
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
bh,
OCFS_BH_CACHED,
inode);
Modified: trunk/fs/ocfs2/vote.c
===================================================================
--- trunk/fs/ocfs2/vote.c 2005-05-23 20:36:46 UTC (rev 2306)
+++ trunk/fs/ocfs2/vote.c 2005-05-23 23:28:05 UTC (rev 2307)
@@ -166,42 +166,43 @@
* respond with BUSY he doesn't actually need the orphaned
* slot, but it doesn't hurt to do it here anyway. */
if ((*orphaned_slot) != OCFS_INVALID_NODE_NUM) {
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
- mlog_bug_on_msg(OCFS_I(inode)->ip_orphaned_slot !=
+ mlog_bug_on_msg(OCFS2_I(inode)->ip_orphaned_slot !=
OCFS_INVALID_NODE_NUM &&
- OCFS_I(inode)->ip_orphaned_slot !=
+ OCFS2_I(inode)->ip_orphaned_slot !=
(*orphaned_slot),
"Inode %"MLFu64": This node thinks it's "
"orphaned in slot %d, messaged it's in %d\n",
- OCFS_I(inode)->ip_blkno,
- OCFS_I(inode)->ip_orphaned_slot,
+ OCFS2_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_orphaned_slot,
*orphaned_slot);
mlog(0, "Setting orphaned slot for inode %"MLFu64" to %d\n",
- OCFS_I(inode)->ip_blkno, *orphaned_slot);
+ OCFS2_I(inode)->ip_blkno, *orphaned_slot);
- OCFS_I(inode)->ip_orphaned_slot = *orphaned_slot;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_orphaned_slot = *orphaned_slot;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
} else {
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
mlog(0, "Sending back orphaned slot %d for inode %"MLFu64"\n",
- OCFS_I(inode)->ip_orphaned_slot,
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_orphaned_slot,
+ OCFS2_I(inode)->ip_blkno);
- *orphaned_slot = OCFS_I(inode)->ip_orphaned_slot;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ *orphaned_slot = OCFS2_I(inode)->ip_orphaned_slot;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
}
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
/* vote no if the file is still open. */
- if (OCFS_I(inode)->ip_open_cnt > 0) {
- mlog(0, "open count = %u\n", OCFS_I(inode)->ip_open_cnt);
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ if (OCFS2_I(inode)->ip_open_count > 0) {
+ mlog(0, "open count = %u\n",
+ OCFS2_I(inode)->ip_open_count);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
goto done;
}
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
/* directories are a bit ugly... What if someone is sitting in
* it? We want to make sure the inode is removed completely as
@@ -213,7 +214,7 @@
if (filemap_fdatawrite(inode->i_mapping)) {
mlog(ML_ERROR, "Could not sync inode %"MLFu64" for delete!\n",
- OCFS_I(inode)->ip_blkno);
+ OCFS2_I(inode)->ip_blkno);
goto done;
}
sync_mapping_buffers(inode->i_mapping);
@@ -224,12 +225,12 @@
* delete on our side. */
response = OCFS2_RESPONSE_OK;
- spin_lock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
SET_INODE_DELETED(inode);
/* We set the SKIP_DELETE flag on the inode so we don't try to
* delete it in delete_inode ourselves. */
- OCFS_I(inode)->ip_flags |= OCFS_INODE_SKIP_DELETE;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_DELETE;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
d_prune_aliases (inode);
@@ -689,7 +690,7 @@
if (!ocfs_node_map_is_only(osb, &osb->mounted_map,
osb->node_num))
status = ocfs2_do_request_vote(osb,
- OCFS_I(inode)->ip_blkno,
+ OCFS2_I(inode)->ip_blkno,
inode->i_generation,
type,
orphaned_slot,
@@ -709,7 +710,7 @@
orphaned_slot = ntohl(resp->r_orphaned_slot);
node = ntohl(resp->r_hdr.h_node_num);
mlog(0, "node %d tells us that inode %"MLFu64" is orphaned in slot "
- "%d\n", node, OCFS_I(inode)->ip_blkno, orphaned_slot);
+ "%d\n", node, OCFS2_I(inode)->ip_blkno, orphaned_slot);
/* The other node may not actually know which slot the inode
* is orphaned in. */
@@ -720,16 +721,16 @@
* orphaned in. We verify that the information is correct and
* then record this in the inode. ocfs_delete_inode will use
* this information to determine which lock to take. */
- spin_lock(&OCFS_I(inode)->ip_lock);
- mlog_bug_on_msg(OCFS_I(inode)->ip_orphaned_slot != orphaned_slot &&
- OCFS_I(inode)->ip_orphaned_slot
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ mlog_bug_on_msg(OCFS2_I(inode)->ip_orphaned_slot != orphaned_slot &&
+ OCFS2_I(inode)->ip_orphaned_slot
!= OCFS_INVALID_NODE_NUM, "Inode %"MLFu64": Node %d "
"says it's orphaned in slot %d, we think it's in %d\n",
- OCFS_I(inode)->ip_blkno, ntohl(resp->r_hdr.h_node_num),
- orphaned_slot, OCFS_I(inode)->ip_orphaned_slot);
+ OCFS2_I(inode)->ip_blkno, ntohl(resp->r_hdr.h_node_num),
+ orphaned_slot, OCFS2_I(inode)->ip_orphaned_slot);
- OCFS_I(inode)->ip_orphaned_slot = orphaned_slot;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ OCFS2_I(inode)->ip_orphaned_slot = orphaned_slot;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
}
int ocfs2_request_delete_vote(struct inode *inode)
@@ -737,15 +738,15 @@
int orphaned_slot;
struct ocfs2_net_response_cb delete_cb;
- spin_lock(&OCFS_I(inode)->ip_lock);
- orphaned_slot = OCFS_I(inode)->ip_orphaned_slot;
- spin_unlock(&OCFS_I(inode)->ip_lock);
+ spin_lock(&OCFS2_I(inode)->ip_lock);
+ orphaned_slot = OCFS2_I(inode)->ip_orphaned_slot;
+ spin_unlock(&OCFS2_I(inode)->ip_lock);
delete_cb.rc_cb = ocfs2_delete_response_cb;
delete_cb.rc_priv = inode;
mlog(0, "Inode %"MLFu64", we start thinking orphaned slot is %d\n",
- OCFS_I(inode)->ip_blkno, orphaned_slot);
+ OCFS2_I(inode)->ip_blkno, orphaned_slot);
return ocfs2_request_vote(inode,
OCFS2_VOTE_REQ_DELETE,
More information about the Ocfs2-commits
mailing list