[Ocfs2-commits] mfasheh commits r1724 - trunk/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue Dec 28 19:04:25 CST 2004
Author: mfasheh
Date: 2004-12-28 19:04:23 -0600 (Tue, 28 Dec 2004)
New Revision: 1724
Modified:
trunk/src/24io.c
trunk/src/alloc.c
trunk/src/aops.c
trunk/src/dir.c
trunk/src/dlmglue.c
trunk/src/file.c
trunk/src/inode.c
trunk/src/journal.c
trunk/src/namei.c
trunk/src/ocfs_compat.h
trunk/src/suballoc.c
Log:
* make our i_size access' 2.6 safe
Modified: trunk/src/24io.c
===================================================================
--- trunk/src/24io.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/24io.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -143,10 +143,10 @@
}
if (rw == READ) {
- if (inode->i_size <= *offp) /* read past end of file */
+ if (i_size_read(inode) <= *offp) /* read past end of file */
return 0;
- if (size > (inode->i_size - *offp))
- size = inode->i_size - *offp;
+ if (size > (i_size_read(inode) - *offp))
+ size = i_size_read(inode) - *offp;
}
/* make sure aligned to either PAGE_SIZE or sect_size IO */
@@ -472,7 +472,7 @@
int sector_size = 1 << OCFS_SB(inode->i_sb)->s_sectsize_bits;
int sector_mask = (1 << sector_size) - 1;
- if (!size || (pos == inode->i_size)) {
+ if (!size || (pos == i_size_read(inode))) {
ocfs_aio_complete(req, 0);
return 0;
}
@@ -480,7 +480,7 @@
if (aio_max_size < sector_size)
return -EINVAL;
- if (pos >= inode->i_size)
+ if (pos >= i_size_read(inode))
return -ENXIO;
if ((pos < 0) || (pos & sector_mask) || (size & sector_mask))
Modified: trunk/src/alloc.c
===================================================================
--- trunk/src/alloc.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/alloc.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -1171,7 +1171,7 @@
down_write(&OCFS_I(inode)->ip_alloc_sem);
target_i_clusters = ocfs2_clusters_for_bytes(osb->sb,
- inode->i_size);
+ i_size_read(inode));
/* the extent map gets truncated in ocfs_do_truncate */
ocfs2_lvb_set_trunc_clusters(inode, target_i_clusters);
@@ -1306,7 +1306,7 @@
*tc = NULL;
new_i_clusters = ocfs2_clusters_for_bytes(osb->sb,
- inode->i_size);
+ i_size_read(inode));
fe = (ocfs2_dinode *) fe_bh->b_data;
LOG_TRACE_ARGS("fe->i_clusters = %u, new_i_clusters = %u, fe->i_size ="
Modified: trunk/src/aops.c
===================================================================
--- trunk/src/aops.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/aops.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -188,7 +188,7 @@
if (vbo != OCFS_I(inode)->ip_mmu_private) {
LOG_ERROR_ARGS("Uh-oh, vbo = %lld, i_size = %llu, mmu = %llu, "
"inode = %llu\n",
- vbo, inode->i_size,
+ vbo, i_size_read(inode),
OCFS_I(inode)->ip_mmu_private,
OCFS_I(inode)->ip_blkno);
BUG();
Modified: trunk/src/dir.c
===================================================================
--- trunk/src/dir.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/dir.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -105,7 +105,7 @@
offset = filp->f_pos & (sb->s_blocksize - 1);
- while (!error && !stored && filp->f_pos < inode->i_size) {
+ while (!error && !stored && filp->f_pos < i_size_read(inode)) {
blk = (filp->f_pos) >> sb->s_blocksize_bits;
bh = ocfs_bread (inode, blk, &err, 0);
if (!bh) {
@@ -153,7 +153,7 @@
filp->f_version = inode->i_version;
}
- while (!error && filp->f_pos < inode->i_size
+ while (!error && filp->f_pos < i_size_read(inode)
&& offset < sb->s_blocksize) {
de = (struct ocfs2_dir_entry *) (bh->b_data + offset);
if (!ocfs_check_dir_entry (inode, de, bh, offset)) {
@@ -276,7 +276,7 @@
int err;
sb = inode->i_sb;
- if ((inode->i_size <
+ if ((i_size_read(inode) <
(OCFS2_DIR_REC_LEN(1) + OCFS2_DIR_REC_LEN(2))) ||
!(bh = ocfs_bread (inode, 0, &err, 0))) {
LOG_ERROR_ARGS ("bad directory (dir #%llu) - no data block\n",
@@ -298,7 +298,7 @@
}
offset = le16_to_cpu(de->rec_len) + le16_to_cpu(de1->rec_len);
de = (struct ocfs2_dir_entry *) ((char *) de1 + le16_to_cpu(de1->rec_len));
- while (offset < inode->i_size ) {
+ while (offset < i_size_read(inode) ) {
if (!bh || (void *) de >= (void *) (bh->b_data + sb->s_blocksize)) {
brelse (bh);
bh = ocfs_bread(inode,
@@ -341,7 +341,7 @@
u64 p_blkno;
spin_lock(&OCFS_I(dir)->ip_lock);
- extend = (dir->i_size == ocfs2_clusters_to_bytes(sb, OCFS_I(dir)->ip_clusters));
+ extend = (i_size_read(dir) == ocfs2_clusters_to_bytes(sb, OCFS_I(dir)->ip_clusters));
spin_unlock(&OCFS_I(dir)->ip_lock);
if (extend) {
@@ -381,8 +381,9 @@
struct buffer_head **new_de_bh)
{
int status = 0;
+ int credits, num_free_extents;
+ loff_t dir_i_size;
ocfs2_dinode *fe = (ocfs2_dinode *) parent_fe_bh->b_data;
- int credits, num_free_extents;
ocfs2_alloc_context *data_ac = NULL;
ocfs2_alloc_context *meta_ac = NULL;
ocfs_journal_handle *handle = NULL;
@@ -392,8 +393,9 @@
LOG_ENTRY();
+ dir_i_size = i_size_read(dir);
LOG_TRACE_ARGS("extending dir %llu (i_size = %llu)\n",
- OCFS_I(dir)->ip_blkno, dir->i_size);
+ OCFS_I(dir)->ip_blkno, dir_i_size);
handle = ocfs_alloc_handle(osb);
if (handle == NULL) {
@@ -403,7 +405,7 @@
/* 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)) {
+ if (dir_i_size == ocfs2_clusters_to_bytes(sb, OCFS_I(dir)->ip_clusters)) {
spin_unlock(&OCFS_I(dir)->ip_lock);
num_free_extents = ocfs_num_free_extents(osb, dir, fe);
if (num_free_extents < 0) {
@@ -464,7 +466,8 @@
goto bail;
}
- dir->i_size += dir->i_sb->s_blocksize;
+ dir_i_size += dir->i_sb->s_blocksize;
+ i_size_write(dir, dir_i_size);
dir->i_blocks += 1;
status = ocfs_mark_inode_dirty(handle, dir, parent_fe_bh);
if (status < 0) {
@@ -516,7 +519,7 @@
OCFS_ASSERT(S_ISDIR(dir->i_mode));
fe = (ocfs2_dinode *) parent_fe_bh->b_data;
- OCFS_ASSERT(fe->i_size == dir->i_size);
+ OCFS_ASSERT(fe->i_size == i_size_read(dir));
sb = dir->i_sb;
@@ -540,7 +543,7 @@
brelse (bh);
bh = NULL;
- if (dir->i_size <= offset) {
+ if (i_size_read(dir) <= offset) {
status = ocfs_extend_dir(osb,
dir,
parent_fe_bh,
Modified: trunk/src/dlmglue.c
===================================================================
--- trunk/src/dlmglue.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/dlmglue.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -1079,7 +1079,7 @@
lvb->lvb_iclusters = oip->ip_clusters;
lvb->lvb_iuid = inode->i_uid;
lvb->lvb_igid = inode->i_gid;
- lvb->lvb_isize = inode->i_size;
+ lvb->lvb_isize = i_size_read(inode);
lvb->lvb_imode = inode->i_mode;
lvb->lvb_inlink = inode->i_nlink;
lvb->lvb_iatime = ocfs_get_seconds(inode->i_atime);
@@ -1102,7 +1102,7 @@
oip->ip_clusters = lvb->lvb_iclusters;
inode->i_uid = lvb->lvb_iuid;
inode->i_gid = lvb->lvb_igid;
- inode->i_size = lvb->lvb_isize;
+ i_size_write(inode, lvb->lvb_isize);
inode->i_mode = lvb->lvb_imode;
inode->i_nlink = lvb->lvb_inlink;
inode->i_blocks = (inode->i_size + inode->i_sb->s_blocksize - 1)
Modified: trunk/src/file.c
===================================================================
--- trunk/src/file.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/file.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -294,9 +294,8 @@
saved_ppos = *ppos;
if (filp->f_flags & O_APPEND) {
- LOG_TRACE_ARGS("O_APPEND: inode->i_size=%llu, ppos was %llu\n",
- inode->i_size, saved_ppos);
- saved_ppos = inode->i_size;
+ saved_ppos = i_size_read(inode);
+ LOG_TRACE_ARGS("O_APPEND: inode->i_size=%llu\n", saved_ppos);
/* ugh, work around some applications which open
* everything O_DIRECT + O_APPEND and really don't
@@ -321,12 +320,12 @@
newsize = count + saved_ppos;
if (filp->f_flags & O_APPEND)
- newsize = count + inode->i_size;
+ newsize = count + i_size_read(inode);
LOG_TRACE_ARGS ("ppos=%llu newsize=%llu cursize=%llu\n",
- saved_ppos, newsize, inode->i_size);
+ saved_ppos, newsize, i_size_read(inode));
- if (newsize > inode->i_size) {
+ if (newsize > i_size_read(inode)) {
if (!level) {
/* we want an extend, but need a higher
* level cluster lock. */
@@ -340,7 +339,7 @@
LOG_TRACE_ARGS("Writing at EOF, will need more allocation: "
"i_size=%llu, need=%llu\n",
- inode->i_size, newsize);
+ i_size_read(inode), newsize);
status = ocfs_extend_file(osb, inode, newsize);
if (status < 0) {
@@ -418,14 +417,14 @@
if (extended) {
LOG_TRACE_STR
("Generic_file_write ok, asking for OIN update now");
- inode->i_size = newsize;
+ i_size_write(inode, newsize);
inode->i_blocks = (newsize + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
if (do_direct_io) {
/*
* This leaves dirty data in holes.
* Caveat Emptor.
*/
- OCFS_I(inode)->ip_mmu_private = inode->i_size;
+ OCFS_I(inode)->ip_mmu_private = i_size_read(inode);
} else {
status = ocfs2_zero_extend(inode);
/*
@@ -484,7 +483,7 @@
/* anything special for o_direct? */
LOG_TRACE_STR ("O_DIRECT");
if (((*ppos) & (sector_size - 1)) || (count & (sector_size - 1)) ||
- ((unsigned long)buf & (sector_size - 1)) || (inode->i_size & (sector_size -1))) {
+ ((unsigned long)buf & (sector_size - 1)) || (i_size_read(inode) & (sector_size -1))) {
do_direct_io = 0;
filp->f_flags &= ~O_DIRECT;
} else {
@@ -581,7 +580,7 @@
LOG_ENTRY();
grow = new_i_size > inode->i_size;
- inode->i_size = new_i_size;
+ i_size_write(inode, new_i_size);
inode->i_blocks = (new_i_size + sb->s_blocksize - 1)
>> sb->s_blocksize_bits;
inode->i_ctime = inode->i_mtime = CURRENT_TIME;
@@ -595,7 +594,7 @@
/* FIXME: I think this should all be in the caller */
spin_lock(&oip->ip_lock);
if (!grow)
- oip->ip_mmu_private = inode->i_size;
+ oip->ip_mmu_private = i_size_read(inode);
spin_unlock(&oip->ip_lock);
bail:
@@ -662,7 +661,7 @@
fe = (ocfs2_dinode *) fe_bh->b_data;
OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
- OCFS_ASSERT(fe->i_size == inode->i_size);
+ OCFS_ASSERT(fe->i_size == i_size_read(inode));
if (new_i_size > fe->i_size) {
LOG_TRACE_ARGS("asked to truncate file with size (%llu) "
@@ -754,19 +753,12 @@
{
struct address_space *mapping = inode->i_mapping;
struct page *page;
- u64 size = inode->i_size - 1;
+ u64 size = i_size_read(inode) - 1;
unsigned int offset;
int res = 0;
-#ifdef PURE_EVIL
- if (evil_filename_check(EVIL_INODE, inode)) {
- LOG_ERROR_ARGS("EVIL ZEROEXTEND: i_size=%llu, mmu_priv=%llu\n",
- inode->i_size, OCFS_I(inode)->ip_mmu_private);
- }
-#endif
-
/* Start the zeroing of blocks */
- if (inode->i_size > OCFS_I(inode)->ip_mmu_private) {
+ if (i_size_read(inode) > OCFS_I(inode)->ip_mmu_private) {
page = grab_cache_page(mapping,
size >> PAGE_CACHE_SHIFT);
if (!page) {
@@ -953,10 +945,10 @@
fe = (ocfs2_dinode *) bh->b_data;
OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
- OCFS_ASSERT(inode->i_size == fe->i_size);
- OCFS_ASSERT(new_i_size >= inode->i_size);
+ OCFS_ASSERT(i_size_read(inode) == fe->i_size);
+ OCFS_ASSERT(new_i_size >= i_size_read(inode));
- if (inode->i_size == new_i_size)
+ if (i_size_read(inode) == new_i_size)
goto leave;
clusters_to_add = ocfs2_clusters_for_bytes(osb->sb, new_i_size)
@@ -964,7 +956,7 @@
LOG_TRACE_ARGS("extend inode %llu, new_i_size = %llu, i_size = %llu, "
"fe->i_clusters = %u, clusters_to_add = %u\n",
- OCFS_I(inode)->ip_blkno, new_i_size, inode->i_size,
+ OCFS_I(inode)->ip_blkno, new_i_size, i_size_read(inode),
fe->i_clusters, clusters_to_add);
if (!clusters_to_add)
@@ -1110,7 +1102,7 @@
fe->i_clusters, fe->i_size);
LOG_TRACE_ARGS("inode: ip_clusters=%u, i_size=%llu\n",
- OCFS_I(inode)->ip_clusters, inode->i_size);
+ OCFS_I(inode)->ip_clusters, i_size_read(inode));
fe->i_ctime = fe->i_mtime = OCFS_CURRENT_TIME;
@@ -1200,8 +1192,8 @@
unlock = 1;
if (attr->ia_valid & ATTR_SIZE &&
- newsize != inode->i_size) {
- if (inode->i_size > newsize)
+ newsize != i_size_read(inode)) {
+ if (i_size_read(inode) > newsize)
status = ocfs_truncate_file(osb, newsize, inode);
else
status = ocfs_extend_file(osb, inode, newsize);
@@ -1212,11 +1204,11 @@
goto bail;
}
spin_lock(&OCFS_I(inode)->ip_lock);
- inode->i_size = newsize;
+ i_size_write(inode, newsize);
inode->i_blocks = (newsize + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
if (OCFS_I(inode)->ip_flags & OCFS_INODE_OPEN_DIRECT) {
/* This is a total broken hack for O_DIRECT crack */
- OCFS_I(inode)->ip_mmu_private = inode->i_size;
+ OCFS_I(inode)->ip_mmu_private = i_size_read(inode);
}
spin_unlock(&OCFS_I(inode)->ip_lock);
status = ocfs2_zero_extend(inode);
Modified: trunk/src/inode.c
===================================================================
--- trunk/src/inode.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/inode.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -415,20 +415,20 @@
atomic_set(GET_INODE_CLEAN_SEQ(inode), atomic_read(&osb->clean_buffer_seq));
inode->i_fop = &ocfs_fops;
inode->i_op = &ocfs_file_iops;
- inode->i_size = fe->i_size;
+ i_size_write(inode, fe->i_size);
OCFS_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));
inode->i_op = &ocfs_dir_iops;
inode->i_fop = &ocfs_dops;
- inode->i_size = fe->i_size;
+ i_size_write(inode, fe->i_size);
break;
case S_IFLNK:
atomic_set(GET_INODE_CLEAN_SEQ(inode), atomic_read(&osb->clean_buffer_seq));
inode->i_op = &ocfs_symlink_inode_operations;
//inode->i_fop = &ocfs_fops;
- inode->i_size = fe->i_size;
+ i_size_write(inode, fe->i_size);
break;
default:
init_special_inode(inode, inode->i_mode,
@@ -887,7 +887,7 @@
#endif
if (((u64)block << inode->i_sb->s_blocksize_bits) >=
- inode->i_size) {
+ i_size_read(inode)) {
OCFS_ASSERT(reada);
return NULL;
}
@@ -995,7 +995,7 @@
fe->i_clusters = OCFS_I(inode)->ip_clusters;
spin_unlock(&OCFS_I(inode)->ip_lock);
- fe->i_size = (u64)inode->i_size;
+ fe->i_size = (u64)i_size_read(inode);
fe->i_links_count = inode->i_nlink;
fe->i_uid = inode->i_uid;
fe->i_gid = inode->i_gid;
@@ -1033,12 +1033,12 @@
spin_lock(&oip->ip_lock);
oip->ip_clusters = fe->i_clusters;
- inode->i_size = fe->i_size;
+ i_size_write(inode, fe->i_size);
if (S_ISREG(inode->i_mode)) {
- oip->ip_mmu_private = inode->i_size;
+ oip->ip_mmu_private = i_size_read(inode);
}
inode->i_nlink = fe->i_links_count;
- inode->i_blocks = (inode->i_size + osb->sb->s_blocksize - 1) >> osb->sb->s_blocksize_bits;
+ inode->i_blocks = (i_size_read(inode) + osb->sb->s_blocksize - 1) >> osb->sb->s_blocksize_bits;
inode->i_uid = fe->i_uid;
inode->i_gid = fe->i_gid;
inode->i_mode = fe->i_mode;
Modified: trunk/src/journal.c
===================================================================
--- trunk/src/journal.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/journal.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -1341,7 +1341,7 @@
offset = 0;
iter = NULL;
- while(offset < orphan_dir_inode->i_size) {
+ while(offset < i_size_read(orphan_dir_inode)) {
blk = offset >> sb->s_blocksize_bits;
bh = ocfs_bread(orphan_dir_inode, blk, &status, 0);
@@ -1356,7 +1356,7 @@
}
local = 0;
- while(offset < orphan_dir_inode->i_size
+ while(offset < i_size_read(orphan_dir_inode)
&& local < sb->s_blocksize) {
de = (struct ocfs2_dir_entry *) (bh->b_data + local);
Modified: trunk/src/namei.c
===================================================================
--- trunk/src/namei.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/namei.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -240,7 +240,7 @@
goto bail;
}
- inode->i_size = inode->i_sb->s_blocksize;
+ i_size_write(inode, inode->i_sb->s_blocksize);
inode->i_nlink = 2;
inode->i_blocks = 1;
status = ocfs_mark_inode_dirty(handle, inode, fe_bh);
@@ -1370,13 +1370,13 @@
int p_blocks;
int virtual, blocks, status, i, bytes_left;
- bytes_left = inode->i_size + 1;
+ bytes_left = i_size_read(inode) + 1;
/* we can't trust i_blocks because we're actually going to
* write i_size + 1 bytes. */
blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
LOG_ENTRY_ARGS("i_blocks = %lu, i_size = %llu, blocks = %d\n",
- inode->i_blocks, inode->i_size, blocks);
+ 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)) {
@@ -1594,7 +1594,7 @@
goto bail;
}
inode->i_rdev = 0;
- inode->i_size = newsize;
+ i_size_write(inode, newsize);
inode->i_blocks = (newsize + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
status = ocfs_mark_inode_dirty(handle, inode, new_fe_bh);
@@ -1865,7 +1865,7 @@
*res_dir = NULL;
sb = dir->i_sb;
- nblocks = dir->i_size >> sb->s_blocksize_bits;
+ nblocks = i_size_read(dir) >> sb->s_blocksize_bits;
start = OCFS_I(dir)->ip_dir_start_lookup;
if (start >= nblocks)
start = 0;
@@ -1929,7 +1929,7 @@
* search the last part of the directory before giving up.
*/
block = nblocks;
- nblocks = dir->i_size >> sb->s_blocksize_bits;
+ nblocks = i_size_read(dir) >> sb->s_blocksize_bits;
if (block < nblocks) {
start = 0;
goto restart;
Modified: trunk/src/ocfs_compat.h
===================================================================
--- trunk/src/ocfs_compat.h 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/ocfs_compat.h 2004-12-29 01:04:23 UTC (rev 1724)
@@ -158,6 +158,16 @@
#define kstatfs statfs
+static inline loff_t i_size_read(struct inode *inode)
+{
+ return inode->i_size;
+}
+
+static inline void i_size_write(struct inode *inode, loff_t i_size)
+{
+ inode->i_size = i_size;
+}
+
#else /* LINUX_VERSION_CODE < 2.6 */
#include <linux/sched.h>
#include <linux/signal.h>
Modified: trunk/src/suballoc.c
===================================================================
--- trunk/src/suballoc.c 2004-12-29 00:30:27 UTC (rev 1723)
+++ trunk/src/suballoc.c 2004-12-29 01:04:23 UTC (rev 1724)
@@ -387,8 +387,8 @@
fe->i_size = ocfs2_clusters_to_bytes(alloc_inode->i_sb,
fe->i_clusters);
spin_unlock(&OCFS_I(alloc_inode)->ip_lock);
- alloc_inode->i_size = fe->i_size;
- alloc_inode->i_blocks = (alloc_inode->i_size + osb->sb->s_blocksize - 1) >> osb->sb->s_blocksize_bits;
+ i_size_write(alloc_inode, fe->i_size);
+ alloc_inode->i_blocks = (i_size_read(alloc_inode) + osb->sb->s_blocksize - 1) >> osb->sb->s_blocksize_bits;
status = 0;
bail:
More information about the Ocfs2-commits
mailing list