and write it out to disk */
 
                unsigned int n = 1;
-               error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
+               error = gfs2_alloc_blocks(ip, &block, &n, 0);
                if (error)
                        goto out_brelse;
                if (isdir) {
        i = mp->mp_aheight;
        do {
                n = blks - alloced;
-               ret = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL);
+               ret = gfs2_alloc_blocks(ip, &bn, &n, 0);
                if (ret)
                        goto out;
                alloced += n;
 
        struct gfs2_dirent *dent;
        struct timespec64 tv = current_time(inode);
 
-       error = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL);
+       error = gfs2_alloc_blocks(ip, &bn, &n, 0);
        if (error)
                return NULL;
        bh = gfs2_meta_new(ip->i_gl, bn);
 
        if (error)
                goto out_ipreserv;
 
-       error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1, &ip->i_generation);
+       error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1);
        if (error)
                goto out_trans_end;
 
 
  * @bn: Used to return the starting block number
  * @nblocks: requested number of blocks/extent length (value/result)
  * @dinode: 1 if we're allocating a dinode block, else 0
- * @generation: the generation number of the inode
  *
  * Returns: 0 or error
  */
 
 int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *nblocks,
-                     bool dinode, u64 *generation)
+                     bool dinode)
 {
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct buffer_head *dibh;
        rbm.rgd->rd_free -= *nblocks;
        spin_unlock(&rbm.rgd->rd_rsspin);
        if (dinode) {
+               u64 generation;
+
                rbm.rgd->rd_dinodes++;
-               *generation = rbm.rgd->rd_igeneration++;
-               if (*generation == 0)
-                       *generation = rbm.rgd->rd_igeneration++;
+               generation = rbm.rgd->rd_igeneration++;
+               if (generation == 0)
+                       generation = rbm.rgd->rd_igeneration++;
+               ip->i_generation = generation;
        }
 
        gfs2_trans_add_meta(rbm.rgd->rd_gl, rbm.rgd->rd_bits[0].bi_bh);
 
 extern void gfs2_inplace_release(struct gfs2_inode *ip);
 
 extern int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *n,
-                            bool dinode, u64 *generation);
+                            bool dinode);
 
 extern void gfs2_rs_deltree(struct gfs2_blkreserv *rs);
 extern void gfs2_rs_delete(struct gfs2_inode *ip);
 
        u64 block;
        int error;
 
-       error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
+       error = gfs2_alloc_blocks(ip, &block, &n, 0);
        if (error)
                return error;
        gfs2_trans_remove_revoke(sdp, block, 1);
                        int mh_size = sizeof(struct gfs2_meta_header);
                        unsigned int n = 1;
 
-                       error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
+                       error = gfs2_alloc_blocks(ip, &block, &n, 0);
                        if (error)
                                return error;
                        gfs2_trans_remove_revoke(sdp, block, 1);
        } else {
                u64 blk;
                unsigned int n = 1;
-               error = gfs2_alloc_blocks(ip, &blk, &n, 0, NULL);
+               error = gfs2_alloc_blocks(ip, &blk, &n, 0);
                if (error)
                        return error;
                gfs2_trans_remove_revoke(sdp, blk, 1);