Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b0d5fd307463405fe1f57494fbb37f810715ed6d
Commit:     b0d5fd307463405fe1f57494fbb37f810715ed6d
Parent:     398bbe68321947f6763fbc259a01eb548ce19408
Author:     Bob Peterson <[EMAIL PROTECTED]>
AuthorDate: Tue Dec 11 19:16:09 2007 -0600
Committer:  Steven Whitehouse <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 08:14:13 2008 +0000

    [GFS2] Only fetch the dinode once in block_map
    
    Function gfs2_block_map was often looking up the disk inode twice.
    This optimizes it so that only does it once.
    
    Signed-off-by: Bob Peterson <[EMAIL PROTECTED]>
    Signed-off-by: Steven Whitehouse <[EMAIL PROTECTED]>
---
 fs/gfs2/bmap.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 4948602..2241141 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -469,6 +469,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
        unsigned int maxlen = bh_map->b_size >> inode->i_blkbits;
        struct metapath mp;
        u64 size;
+       struct buffer_head *dibh = NULL;
 
        BUG_ON(maxlen == 0);
 
@@ -499,6 +500,8 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
        error = gfs2_meta_inode_buffer(ip, &bh);
        if (error)
                goto out_fail;
+       dibh = bh;
+       get_bh(dibh);
 
        for (x = 0; x < end_of_metadata; x++) {
                lookup_block(ip, bh, x, &mp, create, &new, &dblock);
@@ -517,13 +520,8 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
                if (boundary)
                        set_buffer_boundary(bh_map);
                if (new) {
-                       struct buffer_head *dibh;
-                       error = gfs2_meta_inode_buffer(ip, &dibh);
-                       if (!error) {
-                               gfs2_trans_add_bh(ip->i_gl, dibh, 1);
-                               gfs2_dinode_out(ip, dibh->b_data);
-                               brelse(dibh);
-                       }
+                       gfs2_trans_add_bh(ip->i_gl, dibh, 1);
+                       gfs2_dinode_out(ip, dibh->b_data);
                        set_buffer_new(bh_map);
                        goto out_brelse;
                }
@@ -544,6 +542,8 @@ out_brelse:
 out_ok:
        error = 0;
 out_fail:
+       if (dibh)
+               brelse(dibh);
        bmap_unlock(inode, create);
        return error;
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to