gfs2: Add new gfs2_iomap_get helper
authorAndreas Gruenbacher <agruenba@redhat.com>
Sat, 27 Mar 2021 20:56:40 +0000 (21:56 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Sat, 3 Apr 2021 19:38:11 +0000 (21:38 +0200)
Rename the current gfs2_iomap_get and gfs2_iomap_alloc functions to __*.
Add a new gfs2_iomap_get helper that doesn't expose struct metapath.
Rename gfs2_iomap_get_alloc to gfs2_iomap_alloc.  Use the new helpers
where they make sense.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/bmap.c
fs/gfs2/bmap.h
fs/gfs2/file.c

index 7a358ae05185145256f6db04894df5b7630bf85f..cc12dc0d6955e1b03a3dd46c43d26c8bb3802a9f 100644 (file)
@@ -632,7 +632,7 @@ enum alloc_state {
 };
 
 /**
- * gfs2_iomap_alloc - Build a metadata tree of the requested height
+ * __gfs2_iomap_alloc - Build a metadata tree of the requested height
  * @inode: The GFS2 inode
  * @iomap: The iomap structure
  * @mp: The metapath, with proper height information calculated
@@ -642,7 +642,7 @@ enum alloc_state {
  *  ii) Indirect blocks to fill in lower part of the metadata tree
  * iii) Data blocks
  *
- * This function is called after gfs2_iomap_get, which works out the
+ * This function is called after __gfs2_iomap_get, which works out the
  * total number of blocks which we need via gfs2_alloc_size.
  *
  * We then do the actual allocation asking for an extent at a time (if
@@ -660,8 +660,8 @@ enum alloc_state {
  * Returns: errno on error
  */
 
-static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
-                           struct metapath *mp)
+static int __gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
+                             struct metapath *mp)
 {
        struct gfs2_inode *ip = GFS2_I(inode);
        struct gfs2_sbd *sdp = GFS2_SB(inode);
@@ -802,10 +802,10 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
 
        /*
         * For writes to stuffed files, this function is called twice via
-        * gfs2_iomap_get, before and after unstuffing. The size we return the
+        * __gfs2_iomap_get, before and after unstuffing. The size we return the
         * first time needs to be large enough to get the reservation and
         * allocation sizes right.  The size we return the second time must
-        * be exact or else gfs2_iomap_alloc won't do the right thing.
+        * be exact or else __gfs2_iomap_alloc won't do the right thing.
         */
 
        if (gfs2_is_stuffed(ip) || mp->mp_fheight != mp->mp_aheight) {
@@ -829,7 +829,7 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
 }
 
 /**
- * gfs2_iomap_get - Map blocks from an inode to disk blocks
+ * __gfs2_iomap_get - Map blocks from an inode to disk blocks
  * @inode: The inode
  * @pos: Starting position in bytes
  * @length: Length to map, in bytes
@@ -839,9 +839,9 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
  *
  * Returns: errno
  */
-static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
-                         unsigned flags, struct iomap *iomap,
-                         struct metapath *mp)
+static int __gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
+                           unsigned flags, struct iomap *iomap,
+                           struct metapath *mp)
 {
        struct gfs2_inode *ip = GFS2_I(inode);
        struct gfs2_sbd *sdp = GFS2_SB(inode);
@@ -975,12 +975,10 @@ hole_found:
 int gfs2_lblk_to_dblk(struct inode *inode, u32 lblock, u64 *dblock)
 {
        struct iomap iomap = { };
-       struct metapath mp = { .mp_aheight = 1, };
        loff_t pos = (loff_t)lblock << inode->i_blkbits;
        int ret;
 
-       ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), 0, &iomap, &mp);
-       release_metapath(&mp);
+       ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), &iomap);
        if (ret == 0)
                *dblock = iomap.addr >> inode->i_blkbits;
 
@@ -1109,14 +1107,14 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos,
                        if (ret)
                                goto out_trans_end;
                        release_metapath(mp);
-                       ret = gfs2_iomap_get(inode, iomap->offset,
-                                            iomap->length, flags, iomap, mp);
+                       ret = __gfs2_iomap_get(inode, iomap->offset,
+                                              iomap->length, flags, iomap, mp);
                        if (ret)
                                goto out_trans_end;
                }
 
                if (iomap->type == IOMAP_HOLE) {
-                       ret = gfs2_iomap_alloc(inode, iomap, mp);
+                       ret = __gfs2_iomap_alloc(inode, iomap, mp);
                        if (ret) {
                                gfs2_trans_end(sdp);
                                gfs2_inplace_release(ip);
@@ -1168,7 +1166,7 @@ static int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
                        goto out;
        }
 
-       ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
+       ret = __gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
        if (ret)
                goto out_unlock;
 
@@ -1290,9 +1288,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
        struct gfs2_inode *ip = GFS2_I(inode);
        loff_t pos = (loff_t)lblock << inode->i_blkbits;
        loff_t length = bh_map->b_size;
-       struct metapath mp = { .mp_aheight = 1, };
        struct iomap iomap = { };
-       int flags = create ? IOMAP_WRITE : 0;
        int ret;
 
        clear_buffer_mapped(bh_map);
@@ -1300,10 +1296,10 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
        clear_buffer_boundary(bh_map);
        trace_gfs2_bmap(ip, bh_map, lblock, create, 1);
 
-       ret = gfs2_iomap_get(inode, pos, length, flags, &iomap, &mp);
-       if (create && !ret && iomap.type == IOMAP_HOLE)
-               ret = gfs2_iomap_alloc(inode, &iomap, &mp);
-       release_metapath(&mp);
+       if (!create)
+               ret = gfs2_iomap_get(inode, pos, length, &iomap);
+       else
+               ret = gfs2_iomap_alloc(inode, pos, length, &iomap);
        if (ret)
                goto out;
 
@@ -1461,15 +1457,26 @@ out:
        return error;
 }
 
-int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
-                        struct iomap *iomap)
+int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
+                  struct iomap *iomap)
+{
+       struct metapath mp = { .mp_aheight = 1, };
+       int ret;
+
+       ret = __gfs2_iomap_get(inode, pos, length, 0, iomap, &mp);
+       release_metapath(&mp);
+       return ret;
+}
+
+int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
+                    struct iomap *iomap)
 {
        struct metapath mp = { .mp_aheight = 1, };
        int ret;
 
-       ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
+       ret = __gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
        if (!ret && iomap->type == IOMAP_HOLE)
-               ret = gfs2_iomap_alloc(inode, iomap, &mp);
+               ret = __gfs2_iomap_alloc(inode, iomap, &mp);
        release_metapath(&mp);
        return ret;
 }
@@ -2519,7 +2526,6 @@ out:
 static int gfs2_map_blocks(struct iomap_writepage_ctx *wpc, struct inode *inode,
                loff_t offset)
 {
-       struct metapath mp = { .mp_aheight = 1, };
        int ret;
 
        if (WARN_ON_ONCE(gfs2_is_stuffed(GFS2_I(inode))))
@@ -2530,8 +2536,7 @@ static int gfs2_map_blocks(struct iomap_writepage_ctx *wpc, struct inode *inode,
                return 0;
 
        memset(&wpc->iomap, 0, sizeof(wpc->iomap));
-       ret = gfs2_iomap_get(inode, offset, INT_MAX, 0, &wpc->iomap, &mp);
-       release_metapath(&mp);
+       ret = gfs2_iomap_get(inode, offset, INT_MAX, &wpc->iomap);
        return ret;
 }
 
index aed4632d47d30c86f4889487ce638c188da438bd..c63efee8aaa43a9b667877cf2f0b143d427a5a2d 100644 (file)
@@ -49,8 +49,10 @@ extern const struct iomap_writeback_ops gfs2_writeback_ops;
 extern int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page);
 extern int gfs2_block_map(struct inode *inode, sector_t lblock,
                          struct buffer_head *bh, int create);
-extern int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
-                               struct iomap *iomap);
+extern int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
+                         struct iomap *iomap);
+extern int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
+                           struct iomap *iomap);
 extern int gfs2_extent_map(struct inode *inode, u64 lblock, int *new,
                           u64 *dblock, unsigned *extlen);
 extern int gfs2_setattr_size(struct inode *inode, u64 size);
index 2d500f90cdacf3ae539ad7ab1905be79def0491d..5d34b974f4fd33d2a84eae91443c4e8245bbba40 100644 (file)
@@ -421,7 +421,7 @@ static int gfs2_allocate_page_backing(struct page *page, unsigned int length)
        do {
                struct iomap iomap = { };
 
-               if (gfs2_iomap_get_alloc(page->mapping->host, pos, length, &iomap))
+               if (gfs2_iomap_alloc(page->mapping->host, pos, length, &iomap))
                        return -EIO;
 
                if (length < iomap.length)
@@ -991,8 +991,7 @@ static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
        while (offset < end) {
                struct iomap iomap = { };
 
-               error = gfs2_iomap_get_alloc(inode, offset, end - offset,
-                                            &iomap);
+               error = gfs2_iomap_alloc(inode, offset, end - offset, &iomap);
                if (error)
                        goto out;
                offset = iomap.offset + iomap.length;