From 188955ea1f7a8a1b5b4e9d7084a3fbfd4820d2a3 Mon Sep 17 00:00:00 2001 From: "Vladimir V. Saveliev" Date: Wed, 6 Dec 2006 20:39:12 -0800 Subject: [PATCH] --- yaml --- r: 42903 b: refs/heads/master c: c55747682e938c57a9a859d3b26f2c4c83cea011 h: refs/heads/master i: 42901: c024fca2b47805b5d7d8c9a1eabede6949bc4594 42899: 2e70684315cf744e0251a33267e4767af9509d70 42895: 2456ba3dd7c9d63d8a6a62bdf154149178eeaa56 v: v3 --- [refs] | 2 +- trunk/fs/reiserfs/file.c | 54 +++------------------------------------- 2 files changed, 5 insertions(+), 51 deletions(-) diff --git a/[refs] b/[refs] index 73915ba5877a..d8f134966a5a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 301827acbe49d0ba7ec9770803970893ac9ded97 +refs/heads/master: c55747682e938c57a9a859d3b26f2c4c83cea011 diff --git a/trunk/fs/reiserfs/file.c b/trunk/fs/reiserfs/file.c index 970ecd9dbe69..373d862c3f87 100644 --- a/trunk/fs/reiserfs/file.c +++ b/trunk/fs/reiserfs/file.c @@ -406,6 +406,8 @@ static int reiserfs_allocate_blocks_for_region(struct reiserfs_transaction_handl we restart it. This will also free the path. */ if (journal_transaction_should_end (th, th->t_blocks_allocated)) { + inode->i_size = cpu_key_k_offset(&key) + + (to_paste << inode->i_blkbits); res = restart_transaction(th, inode, &path); @@ -1310,56 +1312,8 @@ static ssize_t reiserfs_file_write(struct file *file, /* the file we are going t count = MAX_NON_LFS - (unsigned long)*ppos; } - if (file->f_flags & O_DIRECT) { // Direct IO needs treatment - ssize_t result, after_file_end = 0; - if ((*ppos + count >= inode->i_size) - || (file->f_flags & O_APPEND)) { - /* If we are appending a file, we need to put this savelink in here. - If we will crash while doing direct io, finish_unfinished will - cut the garbage from the file end. */ - reiserfs_write_lock(inode->i_sb); - err = - journal_begin(&th, inode->i_sb, - JOURNAL_PER_BALANCE_CNT); - if (err) { - reiserfs_write_unlock(inode->i_sb); - return err; - } - reiserfs_update_inode_transaction(inode); - add_save_link(&th, inode, 1 /* Truncate */ ); - after_file_end = 1; - err = - journal_end(&th, inode->i_sb, - JOURNAL_PER_BALANCE_CNT); - reiserfs_write_unlock(inode->i_sb); - if (err) - return err; - } - result = do_sync_write(file, buf, count, ppos); - - if (after_file_end) { /* Now update i_size and remove the savelink */ - struct reiserfs_transaction_handle th; - reiserfs_write_lock(inode->i_sb); - err = journal_begin(&th, inode->i_sb, 1); - if (err) { - reiserfs_write_unlock(inode->i_sb); - return err; - } - reiserfs_update_inode_transaction(inode); - mark_inode_dirty(inode); - err = journal_end(&th, inode->i_sb, 1); - if (err) { - reiserfs_write_unlock(inode->i_sb); - return err; - } - err = remove_save_link(inode, 1 /* truncate */ ); - reiserfs_write_unlock(inode->i_sb); - if (err) - return err; - } - - return result; - } + if (file->f_flags & O_DIRECT) + return do_sync_write(file, buf, count, ppos); if (unlikely((ssize_t) count < 0)) return -EINVAL;