gfs2: eliminate rs_inum and reduce the size of gfs2 inodes
authorBob Peterson <rpeterso@redhat.com>
Wed, 13 Jun 2018 13:52:47 +0000 (08:52 -0500)
committerBob Peterson <rpeterso@redhat.com>
Thu, 21 Jun 2018 12:39:31 +0000 (07:39 -0500)
Before this patch, block reservations kept track of the inode
number. At one point, that was a valid thing to do. However, since
we made the reservation a part of the inode (rather than a pointer
to a separate allocated object) the reservation can determine the
inode number by using container_of. This saves us a little memory
in our inode.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Acked-by: Steven Whitehouse <swhiteho@redhat.com>
Reviewed-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/incore.h
fs/gfs2/rgrp.c
fs/gfs2/trace_gfs2.h

index d2ad817e089f96d8b7d73cfcb4255682a5798af5..e9cd2cc292d33d40c397957fe81f4f1cf49f9389 100644 (file)
@@ -295,7 +295,6 @@ struct gfs2_blkreserv {
        struct rb_node rs_node;       /* link to other block reservations */
        struct gfs2_rbm rs_rbm;       /* Start of reservation */
        u32 rs_free;                  /* how many blocks are still free */
-       u64 rs_inum;                  /* Inode number for reservation */
 };
 
 /*
index 6bc5cfe710d18fc1e7bf6a0550a1a032593e0ccb..7a001f6e8aee72568f270532d04e4bd9827b1de5 100644 (file)
@@ -607,8 +607,10 @@ int gfs2_rsqa_alloc(struct gfs2_inode *ip)
 
 static void dump_rs(struct seq_file *seq, const struct gfs2_blkreserv *rs)
 {
+       struct gfs2_inode *ip = container_of(rs, struct gfs2_inode, i_res);
+
        gfs2_print_dbg(seq, "  B: n:%llu s:%llu b:%u f:%u\n",
-                      (unsigned long long)rs->rs_inum,
+                      (unsigned long long)ip->i_no_addr,
                       (unsigned long long)gfs2_rbm_to_block(&rs->rs_rbm),
                       rs->rs_rbm.offset, rs->rs_free);
 }
@@ -1528,7 +1530,6 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,
        if (ret == 0) {
                rs->rs_rbm = rbm;
                rs->rs_free = extlen;
-               rs->rs_inum = ip->i_no_addr;
                rs_insert(ip);
        } else {
                if (goal == rgd->rd_last_alloc + rgd->rd_data0)
index cb10b95efe0f7915ef4770221dca4b6f41a1ac8e..e0025258107a8702777b8b3a4cec97f89924c4d6 100644 (file)
@@ -606,7 +606,8 @@ TRACE_EVENT(gfs2_rs,
                __entry->rd_addr        = rs->rs_rbm.rgd->rd_addr;
                __entry->rd_free_clone  = rs->rs_rbm.rgd->rd_free_clone;
                __entry->rd_reserved    = rs->rs_rbm.rgd->rd_reserved;
-               __entry->inum           = rs->rs_inum;
+               __entry->inum           = container_of(rs, struct gfs2_inode,
+                                                      i_res)->i_no_addr;
                __entry->start          = gfs2_rbm_to_block(&rs->rs_rbm);
                __entry->free           = rs->rs_free;
                __entry->func           = func;