From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Gruenbacher Date: Mon, 30 Jul 2018 14:33:52 +0200 Subject: [Cluster-devel] [PATCH 2/3] gfs2: Split gfs2_indirect_init In-Reply-To: <20180730123353.15815-1-agruenba@redhat.com> References: <20180730123353.15815-1-agruenba@redhat.com> Message-ID: <20180730123353.15815-2-agruenba@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Function gfs2_indirect_init currently initializes a new indirect block and sets up the pointer to the new block in the parent indirect block. This is easier to understand when done in two separate calls. Signed-off-by: Andreas Gruenbacher --- fs/gfs2/bmap.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index a564cf0b7221..caa0b6d71bce 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c @@ -571,22 +571,25 @@ static int gfs2_hole_size(struct inode *inode, sector_t lblock, u64 len, return ret; } -static inline __be64 *gfs2_indirect_init(struct metapath *mp, - struct gfs2_glock *gl, unsigned int i, - unsigned offset, u64 bn) +static void gfs2_indirect_init(struct metapath *mp, struct gfs2_glock *gl, + unsigned int i, u64 bn) { - __be64 *ptr = (__be64 *)(mp->mp_bh[i - 1]->b_data + - ((i > 1) ? sizeof(struct gfs2_meta_header) : - sizeof(struct gfs2_dinode))); - BUG_ON(i < 1); BUG_ON(mp->mp_bh[i] != NULL); mp->mp_bh[i] = gfs2_meta_new(gl, bn); gfs2_trans_add_meta(gl, mp->mp_bh[i]); gfs2_metatype_set(mp->mp_bh[i], GFS2_METATYPE_IN, GFS2_FORMAT_IN); gfs2_buffer_clear_tail(mp->mp_bh[i], sizeof(struct gfs2_meta_header)); +} + +static void gfs2_indirect_set(struct metapath *mp, unsigned int i, + unsigned offset, u64 bn) +{ + __be64 *ptr = (__be64 *)(mp->mp_bh[i]->b_data + + (i ? sizeof(struct gfs2_meta_header) : + sizeof(struct gfs2_dinode))); + ptr += offset; *ptr = cpu_to_be64(bn); - return ptr; } enum alloc_state { @@ -688,8 +691,10 @@ static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap, zero_bn = *ptr; } for (; i - 1 < mp->mp_fheight - ip->i_height && n > 0; - i++, n--) - gfs2_indirect_init(mp, ip->i_gl, i, 0, bn++); + i++, n--, bn++) { + gfs2_indirect_init(mp, ip->i_gl, i, bn); + gfs2_indirect_set(mp, i - 1, 0, bn); + } if (i - 1 == mp->mp_fheight - ip->i_height) { i--; gfs2_buffer_copy_tail(mp->mp_bh[i], @@ -716,9 +721,10 @@ static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap, case ALLOC_GROW_DEPTH: if (i > 1 && i < mp->mp_fheight) gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[i-1]); - for (; i < mp->mp_fheight && n > 0; i++, n--) - gfs2_indirect_init(mp, ip->i_gl, i, - mp->mp_list[i-1], bn++); + for (; i < mp->mp_fheight && n > 0; i++, n--, bn++) { + gfs2_indirect_init(mp, ip->i_gl, i, bn); + gfs2_indirect_set(mp, i - 1, mp->mp_list[i - 1], bn); + } if (i == mp->mp_fheight) state = ALLOC_DATA; if (n == 0) -- 2.17.1