[Ocfs2-commits] mfasheh commits r1421 - trunk/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Fri Sep 3 17:08:26 CDT 2004
Author: mfasheh
Date: 2004-09-03 17:08:24 -0500 (Fri, 03 Sep 2004)
New Revision: 1421
Modified:
trunk/src/file.c
Log:
* figure out the size we want to extend to *after* taking the cluster
lock :)
Modified: trunk/src/file.c
===================================================================
--- trunk/src/file.c 2004-09-03 20:42:54 UTC (rev 1420)
+++ trunk/src/file.c 2004-09-03 22:08:24 UTC (rev 1421)
@@ -1037,37 +1037,7 @@
if (file_size == 0)
goto leave;
- if (fe_bh)
- bh = fe_bh;
- else {
- status = ocfs_read_bh(osb,
- OCFS_I(inode)->ip_blkno << inode->i_sb->s_blocksize_bits,
- &bh, OCFS_BH_CACHED, inode);
- if (status < 0) {
- LOG_ERROR_STATUS (status);
- goto leave;
- }
- }
- fe = (ocfs2_dinode *) bh->b_data;
-
- if (!IS_VALID_FILE_ENTRY(fe)) {
- printk("fe->signature=%8s\n", fe->i_signature);
- LOG_ERROR_ARGS("Invalid fe at block %llu",
- OCFS_I(inode)->ip_blkno);
- status = -EFAIL;
- goto leave;
- }
-
- current_alloc = (u64)fe->i_clusters << osb->s_clustersize_bits;
- alloc_size = file_size - current_alloc;
-
- LOG_TRACE_ARGS("current_alloc=%llu, alloc_size=%llu\n",
- current_alloc, alloc_size);
-
if (passed_handle == NULL) {
- credits = ocfs_calc_extend_credits(osb->sb,
- (__u32) alloc_size);
-
handle = ocfs_alloc_handle(osb);
if (handle == NULL) {
LOG_ERROR_STATUS(status = -ENOMEM);
@@ -1085,14 +1055,39 @@
OCFS_LKM_EXMODE,
FLAG_FILE_EXTEND|FLAG_FILE_UPDATE_OIN,
inode);
+ } else {
+ handle = passed_handle;
+ /* fe_bh is optional if you already have a transaction open. */
+ if (fe_bh)
+ bh = fe_bh;
+ else {
+ status = ocfs_read_bh(osb,
+ OCFS_I(inode)->ip_blkno << inode->i_sb->s_blocksize_bits,
+ &bh, OCFS_BH_CACHED, inode);
+ if (status < 0) {
+ LOG_ERROR_STATUS (status);
+ goto leave;
+ }
+ }
+ }
+ fe = (ocfs2_dinode *) bh->b_data;
+ OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
+
+ current_alloc = (u64)fe->i_clusters << osb->s_clustersize_bits;
+ alloc_size = file_size - current_alloc;
+ LOG_TRACE_ARGS("current_alloc=%llu, alloc_size=%llu\n",
+ current_alloc, alloc_size);
+
+ if (passed_handle == NULL) {
+ credits = ocfs_calc_extend_credits(osb->sb,
+ (__u32) alloc_size);
+
handle = ocfs_start_trans(osb, handle, credits);
if (handle == NULL) {
LOG_ERROR_STATUS(status = -ENOMEM);
goto leave;
}
- } else {
- handle = passed_handle;
}
status = ocfs_journal_access(handle, bh, OCFS_JOURNAL_ACCESS_WRITE);
More information about the Ocfs2-commits
mailing list