]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[GFS2] Shrink gfs2_inode (8) - i_vn
authorSteven Whitehouse <swhiteho@redhat.com>
Wed, 1 Nov 2006 21:05:38 +0000 (16:05 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 30 Nov 2006 15:34:30 +0000 (10:34 -0500)
This shrinks the size of the gfs2_inode by 8 bytes by
replacing the version counter with a one bit valid/invalid
flag.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/glops.c
fs/gfs2/incore.h
fs/gfs2/inode.c
fs/gfs2/ops_inode.c

index aad45b7a927dfd4347543830d505fd496ed24a31..9c2033714b08132c20a7223913e276b8b01ab067 100644 (file)
@@ -305,8 +305,9 @@ static void inode_go_inval(struct gfs2_glock *gl, int flags)
        int data = (flags & DIO_DATA);
 
        if (meta) {
+               struct gfs2_inode *ip = gl->gl_object;
                gfs2_meta_inval(gl);
-               gl->gl_vn++;
+               set_bit(GIF_INVALID, &ip->i_flags);
        }
        if (data)
                gfs2_page_inval(gl);
@@ -351,7 +352,7 @@ static int inode_go_lock(struct gfs2_holder *gh)
        if (!ip)
                return 0;
 
-       if (ip->i_vn != gl->gl_vn) {
+       if (test_bit(GIF_INVALID, &ip->i_flags)) {
                error = gfs2_inode_refresh(ip);
                if (error)
                        return error;
index c0a8c3b6a8523308220703ddf5bdcd5b87befb66..227a74dc5ec08cbdab1fe5590a91b79143ef91fb 100644 (file)
@@ -217,6 +217,7 @@ struct gfs2_alloc {
 };
 
 enum {
+       GIF_INVALID             = 0,
        GIF_QD_LOCKED           = 1,
        GIF_PAGED               = 2,
        GIF_SW_PAGED            = 3,
@@ -228,7 +229,6 @@ struct gfs2_inode {
 
        unsigned long i_flags;          /* GIF_... */
 
-       u64 i_vn;
        struct gfs2_dinode_host i_di; /* To be replaced by ref to block */
 
        struct gfs2_glock *i_gl; /* Move into i_gh? */
index f6177fc683200d6faa959ba7789ab266591d683e..e467780837e6333769ea3e2f74a56a1cf764c032 100644 (file)
@@ -145,7 +145,7 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, struct gfs2_inum_host *i
                if (unlikely(error))
                        goto fail_put;
 
-               ip->i_vn = ip->i_gl->gl_vn - 1;
+               set_bit(GIF_INVALID, &ip->i_flags);
                error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
                if (unlikely(error))
                        goto fail_iopen;
@@ -242,7 +242,7 @@ int gfs2_inode_refresh(struct gfs2_inode *ip)
 
        error = gfs2_dinode_in(ip, dibh->b_data);
        brelse(dibh);
-       ip->i_vn = ip->i_gl->gl_vn;
+       clear_bit(GIF_INVALID, &ip->i_flags);
 
        return error;
 }
index 0e4eade47bf2be7c6e7d0c1321872db3632a8bc5..b247f25effbf75db48d8114b7265a97801ffcab9 100644 (file)
@@ -844,7 +844,7 @@ static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
        struct gfs2_holder i_gh;
        int error;
 
-       if (ip->i_vn == ip->i_gl->gl_vn)
+       if (!test_bit(GIF_INVALID, &ip->i_flags))
                return generic_permission(inode, mask, gfs2_check_acl);
 
        error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);